这个题用双指针,一个来找第一个相同的位置,一个是用来做比较的次数(用needle的长度)就可以来进行判断了。战胜20%
class Solution {
/*** 字符串是否出现
*/
public:
int strStr(string haystack, string needle) {
int hsSize=haystack.size();
int nSize=needle.size();
if(hsSize<nSize){
return -1;
}else if(nSize==0){ return 0;}
//定义两个指针
//针的第一个字母,在海中比较,找到第一个相同的元素,此时利用j指针来比较两个串剩下的元素是否相同,
for(int l=0;l<haystack.size();l++){
if(haystack[l]==needle[0]){
if(haystack.size()-l<nSize) return -1;
int i=1;
if(i==nSize) return l;
while(haystack[l+i]==needle[i]){
if(i<nSize-1)
{
i++;
}
else return l;
}
}
}
return -1;
}
};
当然 这一句代码也可以使用,return
haystack.find(needle);
运行效率还是20%
有个疑问,这些更厉害的算法都在哪里?网上没啥资源呀。