给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1。
注意:字符串 "abc" 重复叠加 0 次是 "",重复叠加 1 次是 "abc",重复叠加 2 次是 "abcabc"。
class Solution {
public:
int repeatedStringMatch(string a, string b) {
int count=0;
//如果b字符串是空,直接返回0
if(b.size()==0){
return 0;
}
int n=b.size();
//如果b中有a没有的字符,直接返回-1
for(int i=0;i<n;i++){
if(a.find(b[i])==string::npos){
return -1;
}
}
//重复叠加的数组
string ans;
//最多叠加次数 两字符串长度相除向上取整+1;
int k=b.size()/a.size()+2;
//最多叠加k次
while(k--){
//叠加a
ans+=a;
//次数++
count++;
//如果叠加后的字符串中有b
if(ans.find(b)!=string::npos){
//返回叠加次数
return count;
}
}
//否则返回-1
return -1;
}
};
524

被折叠的 条评论
为什么被折叠?



