两层for循环,写的不够高效。
c++ 10%:
class Solution {
public:
int strStr(string haystack, string needle) {
if(needle=="")return 0;
int len1 = haystack.size();
int len2 = needle.size();
if (len1 < len2)return -1;
int index = 0;
for (int i = index; i <len1; i++)
{
index = i;
for (int j = 0; j < len2; j++)
{
if (i>=len1||haystack[i] != needle[j])
{
break;
}
else
{
i++;
if (j == len2 - 1)return index;
}
}
i = index;
}
return -1;
}
};
2.啊哈!突然发现还可以更好。
匹配开头:
不考虑
第一个最后待匹配的字符比第二个字符串还要少。i
取值最后截至到len1-len2
c++ 99.25%:
class Solution {
public:
int strStr(string haystack, string needle) {
if(needle=="")return 0;
int len1 = haystack.size();
int len2 = needle.size();
if (len1 < len2)return -1;
int index = 0;
for (int i = index; i <=len1-len2; i++)
{
index = i;
for (int j = 0; j < len2; j++)
{
if (haystack[i] != needle[j])
{
break;
}
else
{
i++;
if (j == len2 - 1)return index;
}
}
i = index;
}
return -1;
}
};