给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1。
注意:
A 与 B 字符串的长度在1和10000区间范围内。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/repeated-string-match 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这题我刚拿到手的时候,看到简单题,提交的次数却是达到了通过次数的三倍,就感觉可能藏有玄机。
这个题的思路还是挺明显的,如果A比B要长或相等,那么直接就可以进行判断,若A中不包含B,那么叠加A,再判断。如果A比B短,那么就优先叠加A,直到A的长度大于或等于B,进行判断。不断给A字符串叠加A的操作,然后判断B是不是在A中,但是这个困扰我的问题就在于,什么时候停止这个对A不断累加A的循环。
我在判断这个停止的时机的时候,隐约有一种要找到最小公倍数的感觉,就是啥时候A的长度成为了B的两倍,就停止,但是结果却超时了,就只好转换思路,考虑A和B本身的长度关系。
我就定义了一个mul_a的字符串对象,用来存在重复叠加的A,我发现,当mul_a的长度,达到b的长度再加一个a的长度之后,若不存在,则再长也不可能存在包含关系,所以,结束的时机就在于当mul_a的长度小于a+b的长度之时。