直接說結論吧,kmp演算法的前提是預處理乙個next陣列
,乙個字串長度為len,那麼這個字串的最小迴圈節就是len-nxt[len]。
因此有:
判斷乙個字串是否完全迴圈可以用(len%(len-nxt[len]))==0,並且nxt[len]!=0該題中詢問的是在末尾補上幾個字串可以使字串完全迴圈,那麼就用最小迴圈節(len-nxt[len])- 最末尾多餘的字元個數(nxt[len]%最小迴圈節)即可
ac**:
/*
* @author: hesorchen
* @date: 2020-07-03 17:05:01
* @lastedittime: 2020-07-12 17:06:22
* @description:
*/#include
using
namespace std;
#define ios \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
#define fre \
#define ll long long
ll nxt[
100010];
char a[
100010];
void
get_nxt()
}int
main()
return0;
}
參考資料
kmp演算法 —— next 陣列的應用 — 字首中最小迴圈節,最大重複次數
kmp求最小迴圈節
kmp最小迴圈節 迴圈週期 定理 假設s的長度為len,則s存在最小迴圈節,迴圈節的長度l為len next len 子串為s 0 len next len 1 1 如果len可以被len next len 整除,則表明字串s可以完全由迴圈節迴圈組成,迴圈週期t len l。2 如果不能,說明還需要...
kmp求最小迴圈節
kmp最小迴圈節 迴圈週期 定理 假設s的長度為len,則s存在最小迴圈節,迴圈節的長度l為len next len 子串為s 0 len next len 1 1 如果len可以被len next len 整除,則表明字串s可以完全由迴圈節迴圈組成。迴圈週期t len l。2 如果不能,說明還需要...
KMP求重複字串 HDU1358
這個題目蠻有意思的,大家都說用到了什麼kmp的靈魂 next陣列的應用,可是也沒見哪個人給我來個很正式的數學推導。到最後也只是看到了乙個部落格上寫的是由觀察得來的結論 其實也就是乙個規律性的東西,就是你利用next陣列以及長度為i的字首可以得出乙個滿足重複的條件 i i next i 0 i i n...