題目鏈結
題意:給兩個字串s1,s2,求s1的字首和s2的字尾最長相等長度,並將相等部分輸出。
思路:擴充套件kmp解決的經典問題:定義母串s和子串t,求t與s的每乙個字尾的最長公共字首。
應用到此題將s1作為子串,s2作為母串進行擴充套件kmp求解,取最長的公共字首且在s2中為字尾的答案。
c++**:
#includeusing namespace std;
const int maxn = 50010;
int next[maxn],ex[maxn];
void getnext( char *s )
}if ( ans )
else
printf ( "%d\n" , ans );
}return 0;
}
hdu4333 擴充套件kmp
題意 給定乙個數字 10 100000,一次將該數的第一位放到放到最後一位,求所有組成的不同的數比原數小的個數,相等的個數,大的個數 分析 由於輸入的數太大了,只能當作字串處理,將輸入的原串貼上在後面,這樣就可以對原串進行ekmp,最終只要統計從第i個位置開始的extend i 如果 len則從第i...
hdu4763 擴充套件kmp
題意是在乙個字串中找出乙個字首乙個字尾和乙個中間的子串,互相不重疊並且三部分完全一樣 運用的是exkmp 對自身求乙個next陣列 next i 表示以i為開始位置的子串與整個串的字首最長匹配到多少長度 然後就是列舉了 注意到我們列舉後三分一的位置時,如果某個位置為i,且next i i len。也...
hdu 6153 擴充套件kmp
題意 給定兩個字元s1,length len1 s2 length len2 求s2 i len i 1,2,3,4,len 在s1中出現的次數乘上其長度 例如 s1 abababc,s2 abc,則應求abc,bc,c,在s1中出現的次 數。然而擴充套件kmp是求字首的,所以想到將s1,s2反轉一...