686. 重複疊加字串匹配『簡單』
阿新 • • 發佈:2020-07-13
題目來源於力扣(LeetCode)
目錄
一、題目
題目相關標籤:字串
注意:
A
與B
字串的長度在1和10000區間範圍內。
二、解題思路
-
通過對字串 A 疊加 N 次使得新字串中包含字串 B,那麼簡單的思路就是迴圈對字串 A 疊加,若新字串中包含字串 B,則返回疊加次數
-
但是需要注意的是,若字串 A 為 "abc",字串 B 為 "abcdabcd",那麼字串 A 疊加無數次也得不到包含字串 B 的結果
-
增加限制條件,若疊加後的字串長度大於字串 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);
}