小白演算法學習 求解兩個字串的最長公共子串行

2021-07-29 10:50:52 字數 1000 閱讀 4447

解答思路是:將字串逆轉,在求逆轉後的字串與原始字串的最大公共子串行長度n,然後用原始字串長度減去n,就可得到需要刪除的字元個數。

那麼問題來了:兩個字串的最大公共子串行長度如何求解?

查閱資料了解到,是有現成的演算法的,參考文章:

然後再把對應的公式轉化為程式語言,就能解決此題。

所以關鍵還是思路,以及平時儲備一些經典演算法的重要性。

上題的答案:

#include

#include
#include
using namespace std;
const int max = 1001;
int maxlen[max][max]; //最長公共子串行,動態規劃求法
int maxlen(string s1, string s2)
else        }    }
return maxlen[length1][length2];}
int main()        //利用回文串的特點
string s2 = s;
reverse(s2.begin(),s2.end());
int max_length = maxlen(s, s2);
cout << length - max_length << endl;    }
return 0;}

求解兩個字串的公共子串

求解兩個字串的公共子串 將這兩個字串展開成乙個矩陣形式,行元素為第乙個字串元素.列元素為第二個字串元素 比較每行與每列中元素個數是否相同,相同的可置其位置為1,不相同則置其位置為0 累加斜對角線上的元素個數,最大的即為兩字串的公共子串個數,它們的行下標在第乙個字串中的元素或是列下標在第二個字串中的元...

連線兩個字串

include include void main char lianjie char a 30 char b 30 原型 extern char strcat char dest,char src 用法 include 功能 把src所指字串新增到dest結尾處 覆蓋dest結尾處的 0 並新增 ...

交換兩個字串

交換兩個字串,原來的字串分別為 學生 和 好 字串輸出顯示為 學生好 交換後輸出顯示為 好學生 include using namespace std int main char c1 5 學生 char c2 3 好 char m,n,t m c1 n c2 cout 交換前 m n n t co...