686. Repeated String Match

题目描述和难度

  • 题目描述:

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

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

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

注意:

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

思路分析

求解关键:

参考解答

参考解答1

public class Solution {

    // 特殊测试用例: A="abc", B="cab"
    // A   "abcd",
    //     "abcdabcd"
    //   B = "cdabcdab"。
    public int repeatedStringMatch(String A, String B) {
        int blen = B.length();
        int count = 1;
        StringBuilder stringBuilder = new StringBuilder(A);
        while (stringBuilder.length() < blen) {
            stringBuilder.append(A);
            count++;
        }
        if (stringBuilder.indexOf(B) >= 0) {
            return count;
        }
        stringBuilder.append(A);
        if (stringBuilder.indexOf(B) >= 0) {
            return count + 1;
        }
        return -1;
    }

    public static void main(String[] args) {
        String A = "abcd";
        String B = "cdabcdab";
        Solution solution = new Solution();
        int repeatedStringMatch = solution.repeatedStringMatch(A, B);
        System.out.println(repeatedStringMatch);
    }
}

本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0686-repeated-string-match ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com