给定两个字符串 a 和 b ,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1 。
注意: 字符串 "abc" 重复叠加 0 次是 "" ,重复叠加 1 次是 "abc" ,重复叠加 2 次是 "abcabc" 。
示例 1:
输入:a = "abcd", b = "cdabcdab"输出:3解释:a 重复叠加三遍后为 "abcdabcdabcd", 此时 b 是其子串。
示例 2:
输入:a = "a", b = "aa"
输出:2
示例 3:
输入:a = "a", b = "a"
输出:1
示例 4:
输入:a = "abc", b = "wxyz"
输出:-1
提示:
func repeatedStringMatch(a string, b string) int {
if b == "" {
return 0
}
left, right := 0, len(b)/len(a)+2
for left <= right {
mid := left + (right-left)>>1
if strings.Contains(strings.Repeat(a, mid), b) {
if mid == 0 || !strings.Contains(strings.Repeat(a, mid-1), b) {
return mid
}
right = mid - 1
} else {
left = mid + 1
}
}
return -1
}
