题目1:28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode)
这道题自己是有思路的,然后竟然AC过了,很意外。因为看代码随想录里说要用KMP算法,这个是什么都不知道,感觉很难。我的思路就是对 haystack 字符串遍历,然后当该字符串中的第 i 个字符等于 needle[0] ,我就遍历 needle 字符串比对这个字符串和 haystack 字符串 i 之后到 needle.size() 个字符串是否相等,相等就返回 i ,这里比对用的 while ,会进行 i ++ 和 j++ ,如果不相等就 将 i 赋值最开始的 i (因为后面比对对 i 进行了++ 操作, 这里我最开始没有加,导致bug没有AC过所有样例),如果 遍历完 j == needle.size() 就是找到了匹配的 返回最开始进入遍历的 i ,否则就返回 -1。代码附下:
class Solution {
public:
int strStr(string haystack, string needle) {
for(int i = 0;i < haystack.size();i++) {
if(haystack[i] == needle[0]) {
int flag = i;
int j = 0;
while(haystack[i] == needle[j] && i < haystack.size() && j < needle.size()) {
i++;
j++;
}
if(j == needle.size()) {
return flag;
}else {
i = flag;
}
}
}
return -1;
}
};
题目2:459. 重复的子字符串 - 力扣(LeetCode)
这道题里边用了库函数find,其实自己实现还是很麻烦的,这里我也是参考了移动匹配,就是s+s 得到新的字符串SS,如果SS中还有s证明该字符串是可以由子字符串组成的。
字符串总结:字符串里用到了很多双指针的操作,有些算法还是很巧妙的,目前还没办法说像做题一样对这些东西进行一个分类,例如遇到什么样的题就怎么怎么样,其实我们学习算法也是为了通过一道题,有些题通过暴力方法可能需要很麻烦的思考各种条件,而有了这些算法的直到,我们可以清晰明了的AC。具体的题目就要因题而议了,还是要多反复看。字符串KMP算法,我先跳过了确实有些看的不是很明白。不过KMP是针对这种字符串匹配的一把好手。
双指针总结:多做几遍题吧,从里边慢慢体会双指针的好处吧。
本文讲述了作者在LeetCode上的两道字符串匹配题目,分享了使用暴力方法和双指针解决字符串查找的策略,以及初次接触KMP算法的经历,强调算法学习的实践重要性。
1626





