28. 实现 strStr() (本题可以跳过)
方法:
方法一: 暴力法
i 表示最多能移动到n-m位置, 超过则退出循环。
j表示haystack 初始位置
k表示needle的初始位置
如果haystack [j]== needle[k]且 k<m 则 j++, k++;
如果 k==m 则返回i;
退出大循环 不满足 返回-1;
注意:
代码:
class Solution {
public:
int strStr(string haystack, string needle) {
int n= haystack.size();
int m = needle.size();
for(int i=0; i<=n-m; i++){
int j = i;
int k=0;
while(k <m &&haystack[j]== needle[k]){
j++;
k++;
}
if(k==m){
return i;
}
}
return -1;
}
};
方法:
方法二: == KMP算法 ==
1. 构建next数组
2. 匹配
注意:
代码:
459.重复的子字符串 (本题可以跳过)
方法:
方法一: 技巧
将s累加起来 变成ss
将ss去掉 首元素 与伪元素
若能在ss中找到 s 则 返回true
否则返回 false
注意:
代码:
class Solution {
public:
bool repeatedSubstringPattern(string s) {
string ss=s+s;
ss.erase(ss.begin());
ss.erase(ss.end()-1);
if(ss.find(s) != -1){
return true;
}
return false;
}
};