686. 重复叠加字符串匹配『简单』

题目来源于力扣(LeetCode

一、题目

686. 重复叠加字符串匹配

题目相关标签:字符串

注意:

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

二、解题思路

  1. 通过对字符串 A 叠加 N 次使得新字符串中包含字符串 B,那么简单的思路就是循环对字符串 A 叠加,若新字符串中包含字符串 B,则返回叠加次数

  2. 但是需要注意的是,若字符串 A 为 "abc",字符串 B 为 "abcdabcd",那么字符串 A 叠加无数次也得不到包含字符串 B 的结果

  3. 增加限制条件,若叠加后的字符串长度大于字符串 A 与字符串 B 的长度后,仍不包含字符串 B 时,则返回 -1

三、代码实现

public static int repeatedStringMatch(String A, String B) {
    StringBuilder sb = new StringBuilder();
    sb.append(A);
    // 若 maxLen 长度的字符串中未包含字符串 B,则说明无法通过叠加字符串 A,使得新字符串包含 B
    int maxLen = A.length() + B.length();
    // 已 append 一次,所以 ans 初始为 1
    int ans = 1;
    // 循环叠加,使用 lastIndexOf 来代替 indexOf 更快速
    while (sb.lastIndexOf(B) == -1) {
        // 字符串长度超过 maxLen 时,说明无法通过叠加字符串 A,使得新字符串包含 B
        if (sb.length() > maxLen) {
            return -1;
        }
        sb.append(A);
        ans++;
    }
    return ans;
}

四、执行用时

五、部分测试用例

public static void main(String[] args) {
    String A = "abcd", B = "cdabcdab";  // output: 3
    
    int result = repeatedStringMatch(A, B);
    System.out.println(result);
}
posted @ 2020-07-13 20:00  知音12138  阅读(311)  评论(0编辑  收藏  举报