10,实现strStr
示例:
输入 | 输出 |
|---|---|
hello -> ll | 2 |
aaaaaa->bba | -1 |
代码:
//实现 a="llhalalv" b="ha" 返回b在a中的第一次出现位置下标 2
#include <iostream>
using namespace std;
#include <string>
// int main()
// {
// string strs="llhalalv",tar="ha";
// int i=0,j=0;
// while (strs[i]!='\0' && tar[j]!='\0')
// {
// if (tar[j] == strs[i])//判断是否相等
// {
// i++;
// j++;
// }
// //不相等退回开得位置 i+1 ,j =0
// else
// {
// i = i-j+1;
// j = 0;
// }
// }
// if (j == tar.length())//j为步长
// {
// cout<< i - j<<endl;
// }
// return -1;
// }
int main()
{
string strs="llhalalv",tar="ha";
if (tar.empty())
{
return 0;
}
int pos = strs.find(tar);
cout<< pos <<endl;
}11,搜索插入位置
示例:
输入 | 输出 |
|---|---|
[1,3,5,6] ->5 | 2 |
[1,3,5,6]->2 | 1 |
代码:
//一排序数组 tar目边值所在位置 不存咋就插入合适位置
#include <iostream>
using namespace std;
#include <vector>
// int main()
// {
// vector<int> nums{1,2,4,5,7,9};
// int tar=7;
// for (int i=0;i<nums.size();i++)
// {
// if (nums[i] >= tar)
// {
// cout<<i<<endl;
// }
// }
// cout<<nums.size()<<endl;
// }
// int main()
// {
// vector<int> nums{1,2,4,5,7,9};
// int tar=7;
// cout<< lower_bound(nums.begin(), nums.end(),tar) - nums.begin()<<endl;
// }
int main()
{
vector<int> nums{1,2,4,5,7,9};
int tar=7;
vector<int>::iterator i = nums.begin(),j = nums.end();
while (i < j)
{
auto mid = i + ((j - i)/2);
if (*mid < tar)
{
i = mid + 1;
}
else
{
j = mid;
}
}
cout<< i - nums.begin()<<endl;
}12,最后一个单词的长度
示例:
输入 | 输出 |
|---|---|
hello world | 5 |
xxx lll | 3 |
代码:
//统计最后一个单词的长度
#include <iostream>
using namespace std;
#include <cstring>
#include <sstream>
#include <algorithm>
// int main()
// {
// string s="hello world lyywsh";
// istringstream in(s);//串流输入
// string res;
// while(in>>res);//依次输出一个单词组
// cout<< res.size()<<endl;
// }
// int main()
// {
// //char *s[]={"hello","world" ,"lyywsh"};
// const char *s="hello world lyywsh";
// int cnt=0;
// if(*s == ' ')
// cout<<cnt<<endl;
// int len=strlen(s);
// if(len == 1)
// cout<<((s[0]==' ')?0:1)<<endl;
// for(int i=len-1; i>=0;i--)
// {
// if(s[i]!=' ')
// cnt++;
// if(s[i]==' ' && cnt>0)
// break;
// }
// cout<<cnt<<endl;
// }
//从后向前,找出第一个不是空格的地方命名为end, 再从end向前,找出第一个空格的地方命名为start,end-start
int main()
{
//char *s[]={"hello","world" ,"lyywsh"};
const char *s="hello world lyywsh";
int end=strlen(s)-1;
int start=0;
int res=0;
while(end>=0 && s[end]==' ')
end--;
start=end;
while(start>=0&&s[start]!=' ')
start--;
res=end-start;
cout<<res<<endl;
}