欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode—— 686 重复重叠字符串匹配

程序员文章站 2022-05-29 13:53:11
...

问题描述

给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1。

举个例子,A = "abcd",B = "cdabcdab"。

答案为 3, 因为 A 重复叠加三遍后为 “abcdabcdabcd”,此时 B 是其子串;A 重复叠加两遍后为"abcdabcd",B 并不是其子串。

注意:

 A 与 B 字符串的长度在1和10000区间范围内。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/repeated-string-match
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

执行结果

LeetCode—— 686 重复重叠字符串匹配

代码描述

思路:首先A重叠多少次,得到S, 且S中包含子串B。 也就是S = [A头+A+A...+A尾] 中包含B。 也就是说,S的总长度<= 2A + B。

整理得到:count 个A的长度 - 2个A的长度 <= B的长度。即(count-2)*lenA <= lenB.

class Solution {
public:
    int repeatedStringMatch(string A, string B) {
        string s = A;
        int count = 1;
        int lenA = A.size(), lenB = B.size();
        while((count - 2)*lenA <= lenB)
        {
            if(A.find(B) != -1)
                return count;
            A += s;
            ++count;
        }
        return -1;
    }
};

 

相关标签: LeetCode解题报告