程式設計:給定兩個字串a,b(只包含26個英文本母),輸出所有公共的最長子字串(如果出現重複子串,則輸出多次)
輸入包括兩行,每行為乙個連續字串(大小寫敏感)
輸出包括多行,每行為掃瞄到的最長公共子串,按照該子串在字串a(即第一行輸入字串)中出現的先後次序輸出
abcxyzabcrst
opqrstabc
樣例輸出:
abcabc
rst動態規劃
假設兩個字串分別為s和t,s[i]
和t[j]
分別表示其第i
和第j
個字元(字元順序從0
開始),再令l[i, j]
表示以s[i]
和s[j]
為結尾的相同子串的最大長度。應該不難遞推出l[i, j]
和l[i+1,j+1]
之間的關係,因為兩者其實只差s[i+1]
和t[j+1]
這一對字元。若s[i+1]
和t[j+1]
不同,那麼l[i+1, j+1]
自然應該是0
,因為任何以它們為結尾的子串都不可能完全相同;而如果s[i+1]
和t[j+1]
相同,那麼就只要在以s[i]
和t[j]
結尾的最長相同子串之後分別添上這兩個字元即可,這樣就可以讓長度增加一位。合併上述兩種情況,也就得到l[i+1,j+1]=(s[i]==t[j]?l[i,j]+1:0)
這樣的關係。
int main()
else
}for (int i = 0; i < str1.size() + 1; i++)
for (int j = 0; j < str2.size() + 1; j++)
cout << endl;
} }return 0;
}
最長不重複字串
一直以為這個方法是對的,後來發現這種方法是錯誤的,不能處理巢狀的情況,如 adercijckega 稍後再修正!最近面試遇到這題,再網上參考了一些blog,自己歸納出方法並用c 實現。問題 求出字串中最長不重複的字串,如 abccdefgchi 最長不重複字串為defgchi.分析 1.定義乙個二維...
最長不重複字串 C C
萬能的遍曆法 時間複雜度o n 3 沒有用到啥高深的演算法,遍歷就是了。include stdafx.h include include include 有無重複字元 bool containrepeatch char str return false int tmain int argc,tcha...
找出字串的最長不重複字串
這是我遇到的一道校招題目 給定一字串只包含數字,請寫乙個演算法,找出該字串中的最長不重複子串 不重複是指子串中每一元素不同於子串中其他元素 如 120135435 最長不重複子串為 201354 要求用j a或者c來寫,我用了j a。思想 從頭開始擷取字串,只要後乙個元素不在擷取的字串裡,就更新擷取...