重复字符串匹配Leetcode

时间:2018-05-03 06:15:04

标签: python algorithm

给定两个字符串A和B,找到A必须重复的最小次数,使得B是它的子字符串。如果没有这样的解决方案,则返回-1。

例如,A =" abcd"和B =" cdabcdab"。

返回3,因为重复A三次(“abcdabcdabcd”),B是它的子串;和B不是A的子串重复两次(" abcdabcd")。

注意: A和B的长度在1到10000之间。

解决方案有这样的解释:

现在,假设q是len(B)< = len(A * q)的最小数。我们只需要检查B是否是A * q或A *(q + 1)的子串。如果我们尝试k< q,那么B的长度大于A * q,因此不能成为子串。当k = q + 1时,A * k已经足够大,可以尝试B的所有位置;即,A [i:i + len(B)] == B,i = 0,1,...,len(A) - 1。

我无法围绕q + 1案例。如果q是将B作为子字符串的最小数字,那么为什么在代码中我们必须检查q + 1情况。

很久以前有人问过。 Repeated String Match

1 个答案:

答案 0 :(得分:0)

举个例子:A =“abcd”,B =“cdabcdab”。然后是len(B) = 8len(A) = 4。因此,q = 2。但是A * 2 = abcdabcd,所以B不是子字符串。因此,您还需要检查A * 3 = abcdabcdabcd

请注意,q不是B成为A*q的子字符串的最小数字,而是len(B) <= len(A*q)保留的最小数字。