标签:前缀 style 链接 问题 相同 turn == 存在 随笔
其实$Chemist$在之前写了非常棒的题解!
我长话短说,补充两句。
$My$ $Code$
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 5 using namespace std; 6 7 int len,j,maxx,tmp; 8 int nxt[1000090]; 9 char a[1000090]; 10 11 int main() 12 { 13 scanf("%s",a+1); 14 len=strlen(a+1); 15 for(int i=2;i<=len;i++) 16 { 17 while(j&&a[i]!=a[j+1]) j=nxt[j]; 18 if(a[i]==a[j+1]) j++; 19 nxt[i]=j; 20 if(i!=len) maxx=max(maxx,nxt[i]); 21 } 22 if(!nxt[len]){printf("Just a legend");return 0;} 23 tmp=nxt[len]; 24 while(tmp>maxx) tmp=nxt[tmp]; 25 if(!tmp) {printf("Just a legend");return 0;} 26 for(int i=2;i<len;i++) 27 if(tmp==nxt[i]) 28 { 29 for(int j=i-tmp+1;j<=i;j++) 30 printf("%c",a[j]); 31 return 0; 32 } 33 return 0; 34 }
今天复习(学习)了下$KMP$算法,感觉这个算法最精妙的部分还是在$next$数组,而且体现了迭代的思想(?)“$j$=$next[j]$”,陌生的字符串问题可与$next$做类比,稍加改动进行求解。
另外欢迎大家资瓷文雀乐队新专辑《廟雨連珠》,链接藏在了这篇随笔的某个地方233.
CF126B Password【KMP】By cellur925
标签:前缀 style 链接 问题 相同 turn == 存在 随笔
原文地址:https://www.cnblogs.com/nopartyfoucaodong/p/9741272.html