给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1。
举个例子,A = “abcd”,B = “cdabcdab”。
答案为 3, 因为 A 重复叠加三遍后为 “abcdabcdabcd”,此时 B 是其子串;A 重复叠加两遍后为”abcdabcd”,B 并不是其子串。
注意:
A 与 B 字符串的长度在1和10000区间范围内。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class Solution { public int repeatedStringMatch(String A, String B) { if (A.length() >= B.length()) { if (A.contains(B)) return 1; } for (int s = 0; s < A.length(); s++) { if (A.charAt(s) == B.charAt(0)) { int ret = 1; boolean flag = false; int index = s; for (int i = 0; i < B.length(); i++) { if (index == A.length()) { index = 0; ret += 1; } if (B.charAt(i) == A.charAt(index)) { index++; continue; } flag = true; break; } if (flag) continue; return ret; } } return -1; } }
|
代码中注释对应语句
- 注释1.如果是子串直接返回1.
- 注释2.遍历A字符串寻找与B字符串开头一致的字符.
- 注释3.遍历B字符串,然后对位到A字符串.
- 注释4.任意不一样,则该情况走不通.
- 注释5.如果索引超过A字符串长度,则需要叠加数+1.