给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1。

举个例子,A = "abcd",B = "cdabcdab"。

答案为 3, 因为 A 重复叠加三遍后为 “abcdabcdabcd”,此时 B 是其子串;A 重复叠加两遍后为"abcdabcd",B 并不是其子串。

注意:

A 与 B 字符串的长度在1和10000区间范围内。

为什么(len2 / len1 + 2) * len1中要加2

比如字符串A: "abcd"

字符串B如果有答案

无非有三种情况

1.

"abcd"   =   len2 / len1

2.

"..cd"(不等于A,相当于A的后缀) + "abcd" * n  =  len2 / len1 + 1

"abcd" * n + "ab.."(不等于A,相当于A的前缀)   =  len2 / len1 + 1

3.

"..cd" + "abcd" * n + ".ab.." = len2 / len1 + 2

class Solution {
public:
int repeatedStringMatch(string A, string B) {
string temp = A;
int cnt = 1;
int len1 = A.size();
int len2 = B.size();
int boundary = (len2 / len1 + 2) * len1;
for(int i = len1; i <= boundary; i += len1)
{
string:: size_type idx;
idx = A.find(B);
if(idx != string::npos)
{
return cnt;
}
A += temp;
cnt++;
}
return -1;
}
};
05-11 02:58