28.实现strStr
题目链接:28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode)
题目:给你两个字符串 haystack
和 needle
,请你在 haystack
字符串中找出 needle
字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle
不是 haystack
的一部分,则返回 -1
class Solution {
public:
int strStr(string haystack, string needle) {
int ans=-1;
int n=haystack.size(),m=needle.size();
if(n<m) return ans;
int curh=0,curn=0;
while(curh<n){
if(haystack[curh]==needle[curn]){
//如果首字母相同
int pos=curh;
while(haystack[curh]==needle[curn]&&curn<m){
curh++;
curn++;
}
if(curn==m){//判断完了needle
ans=pos;
break;
}else{//没判断完needle,curn归零,并判断下一位
curh=pos+1;
curn=0;
}
}else{//当前字符不相同,则haystack判断下一位
curh++;
}
}
return ans;
}
};
459.重复的子字符串
题目链接:459. 重复的子字符串 - 力扣(LeetCode)
题目:给定一个非空的字符串 s
,检查是否可以通过由它的一个子串重复多次构成。
思路: 字符串可以有子串重复两次,则返回true。那么:将s重复两次为ss,去除首尾两个字符,即破坏了两个子串,再进行判断——是否s为重复后ss的子串即可
class Solution {
public:
bool repeatedSubstringPattern(string s) {
//字符串可以有子串重复两次,则返回true
//将s重复两次为ss,去除首尾两个字符,即破坏了两个子串,再进行判断——是否s为重复后ss的子串即可
string str=s+s;
str=str.substr(1,str.size()-2);
if(str.find(s)==-1) return false;//在str中查找s,如果没找到就返回false
return true;
}
};