题号686:
给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1。
举个例子,A = "abcd",B = "cdabcdab"。
答案为 3, 因为 A 重复叠加三遍后为 “abcdabcdabcd”,此时 B 是其子串;A 重复叠加两遍后为"abcdabcd",B 并不是其子串。
注意:
A 与 B 字符串的长度在1和10000区间范围内。
解题思路:
当A重复多少次后,能判断B一定不是A叠加后的子串?
测试得,当A重复n次后的字符串 s 长度,大于等于A和B的字符串长度时,若B不是s的子串,则B一定不是A叠加后的子串。(不会证明orz。。。)
如果直接写20000(A和B的最大长度之和)理论上也是正确的,但运行时会超时。
代码实现:
class Solution {
public:
int repeatedStringMatch(string A, string B) {
int count=1;
string s=A;
if(s.find(B)!=-1)
return count;
while(s.length()
s+=A;
count++;
if(s.find(B)!=-1)
return count;
}
return -1;
}
};
PS:今天是连续更新的最后一天,接下来就不定期更新了,希望今年能做满300题吧。加油!
领取专属 10元无门槛券
私享最新 技术干货