給定兩個字串 a 和 b,尋找重複疊加字串 a 的最小次數,使得字串 b 成為疊加後的字串 a 的子串,如果不存在則返回 -1。
注意:字串 "abc" 重複疊加 0 次是 "",重複疊加 1 次是 "abc",重複疊加 2 次是 "abcabc"。
package com.xu.string;
public class sixeightsix
if(n-index>=m)
return (m+index-n-1)/n+2;
}
public static int strstr(string haystack, string needle)
int pi = new int[m];
for (int i = 1, j = 0; i < m; i++)
if (needle.charat(i) == needle.charat(j))
pi[i] = j;
}for (int i = 0, j = 0; i - j < n; i++)
if (haystack.charat(i % n) == needle.charat(j))
if (j == m)
}return -1;
}public static void main(string args)
示例: a = "abcd", b = "cdabcdab"
b的組成如下 cd + 1個 abcd + ab
故需要a的個數為
(bn - (an - index) - 1 / an) + 2 即 (bn + index - an - 1) / an + 2
其中an-index為cd的長度
因為不知道cd abcd ab後面是否存在ab這個尾巴, 所有統一減1計算需要a的個數
cd需要a乙個, 尾巴ab需要a乙個, 故還要+2
所以結果為 (bn + index - an - 1) / an + 2
686 重複疊加字串匹配
題目描述 給定兩個字串 a 和 b,尋找重複疊加字串a的最小次數,使得字串b成為疊加後的字串a的子串,如果不存在則返回 1。舉個例子,a abcd b cdabcdab 答案為 3,因為 a 重複疊加三遍後為 abcdabcdabcd 此時 b 是其子串 a 重複疊加兩遍後為 abcdabcd b ...
LeetCode 686 重複疊加字串匹配
給定兩個字串 a 和 b,尋找重複疊加字串a的最小次數,使得字串b成為疊加後的字串a的子串,如果不存在則返回 1。舉個例子,a abcd b cdabcdab 答案為 3,因為 a 重複疊加三遍後為 abcdabcdabcd 此時 b 是其子串 a 重複疊加兩遍後為 abcdabcd b 並不是其子...
LeetCode 686 重複疊加字串匹配
題目描述 給定兩個字串 a 和 b,尋找重複疊加字串a的最小次數,使得字串b成為疊加後的字串a的子串,如果不存在則返回 1。舉個例子,a abcd b cdabcdab 答案為 3,因為 a 重複疊加三遍後為 abcdabcdabcd 此時 b 是其子串 a 重複疊加兩遍後為 abcdabcd b ...