首先字首和字尾相等,聯想到kmp(kan mao pian)演算法:
該子串既是以len-1結尾的字尾,也是串中以某一第i位置結尾的字尾,也是整個串的字首。
(1)首先kmp演算法處理出[0,len]位置的next值。
對於[0,len-1]的next儲存的是失配的下一匹配位置;[1,len]可看作[0,len-1]中以各個位置為結尾的字串字首、字尾相等的子串長度。
(2)對於以len-1結尾的與字首相等的字尾子串長度,若在[1,len-2]位置中也有相同長度的next值 ,則都等於字首。因此在字首、串中和字尾都出現滿足條件。
故只要對k=next[len-1],若k長度未在[1,len-1]出現,則k=next[k];否則輸出當前長度的字尾子串滿足條件
#include
#include
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const
int maxn=
1e6+10;
int nxt[maxn]
;int cnt[maxn]
;void
getnext
(string &p)
else k=nxt[k];}
for(
int i=
1;i1;i++
) cnt[nxt[i]]++
;}void
solve
(string &s)
for(
int i=len-k-
1;i1;i++
) cout<; cout<}int
main()
牛客練習題 水 悠悠碧波
帕秋莉掌握了一種水屬性魔法 這種魔法可以淨化黑暗 帕秋莉發現對於乙個黑暗的咒語s,可以使用這個水元素魔法淨化它,淨化的咒語是乙個最長的字串t,t滿足以下條件 它是s的字首 它是s的字尾 除字首和字尾外,它還在s 現過至少一次 既然你都學會了,那麼淨化的工作就交給你了!輸入描述 一行字串 s 代表黑暗...
牛客 水 悠悠碧波(Next陣列 kmp小運用)
傳送門 題意 給乙個字串s求子串滿足 子串是s串的公共前字尾又在s串 現過 題解 先求出next陣列 得到最長公共前字尾,然後列舉公共前字尾,從大到小,看是否有滿足情況的,如果有,break然後輸出子串p ac include using namespace std const int maxn 1...
2019牛客第十場題解 C F
題意 第i天在原來字串的基礎上在字串的前面或者後面新增乙個字元。問新增完字元後有多少種不同長度的迴圈節。定義迴圈節為能把原字串分割成長度為k的乙個或多個部分。並且後面可以有或者沒有迴圈節的開頭部分。也就是說 s 1 s n x s x 1 s n 則說明迴圈節為x 1.明顯,對於長度為len的字串,...