686 重複疊加字串匹配(總結技巧)

2022-09-21 16:30:09 字數 983 閱讀 7697

給定兩個字串 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 ...