Leetcode686.Repeated String Match重复叠加字符串匹配

给定两个字符串 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;
    }
};
原文地址:https://www.cnblogs.com/lMonster81/p/10434021.html