[TIOJ] 1489 核心字串
link: http://tioj.infor.org/problems/1489 啊啊啊!甚麼咚咚啊@@,一直看錯題看錯題,而且我還是通宵來寫的,結果好生氣><(雖然問題大部分出在我身上),不過我還真的看不懂第一個核心字串原來是指長度最小的那個@@,看了別人的code後才終於知道了,但也順便學了一下別人的作法了XD 而且看錯題以為是找相同前後綴的時候還看懂了KMP演算法的failure function! 要判斷是不是核心字串很簡單,就測過26字母就可以了,但找最短的時候,就必須使用到爬行法,一次增加右邊一個,再看看左邊可以砍掉幾個,若最後長度較小就更新。 #include<bits/stdc++.h> using namespace std ; int n; string a; int main () { ios_base::sync_with_stdio( 0); cin. tie ( 0); while(cin >> n,n) { cin >> a; int used[30] = {}; int cnt = 26; int i; for(i = 0; i < a. length ( ) && cnt > 0; i++) { if(used[a[i]-'a'] == 0) cnt--; used[a[i]-'a']++; } if(i == a. length ( ) && cnt != 0) { cout << "not found" << '\n'; continue; } int len = i; int l = 0, r = i-1; for(int front = 0; i < a. len