137.重复叠加字符串匹配

题号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题吧。加油!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180817G0QVE100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券