1. 程式人生 > 實用技巧 >686. 重複疊加字串匹配『簡單』

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);
}