字符串总结:
1.其实很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。如题:https://programmercarl.com/%E5%89%91%E6%8C%87Offer05.%E6%9B%BF%E6%8D%A2%E7%A9%BA%E6%A0%BC.html
2.针对数组中的删除操作的时候,可以用移除元素的方法原地操作。时间复杂度为O(n):https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html
3.反转字符串的时候:当需要固定一段一段去处理字符串时,假设长度为k,for循环可以+k。记住:先整体反转再局部反转的思想。或者先局部反转再整体反转,可以实现左旋。
28. 找出字符串中第一个匹配项的下标
题目链接:https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/
算法思想:两重循环
其实可以用KMP,但是我没用。
代码:
class Solution {
public:
bool checksame(string haystack, string needle, int i)
{
if((i+needle.size())> haystack.size())
return false;
int j=0;
int max_len = i+needle.size();
while(i<max_len)
{ cout<<"i:"<<i<<endl;
cout<<"haystack[i]:"<<haystack[i]<<" needle[j]"<<needle[j]<<endl;
if(haystack[i]!=needle[j])
return false;
i++;
j++;
}
cout<<"return true"<<endl;
return true;
}
int strStr(string haystack, string needle) {
int lenh = haystack.size();
int lenn = needle.size();
for(int i=0;i<lenh;i++)
{
if(haystack[i] == needle[0])
{
bool res = checksame(haystack, needle, i);
if(res==true)
return i;
}
}
return -1;
}
};