日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ : 返回两个字符串的最长公共字符串

發(fā)布時間:2024/10/14 c/c++ 74 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ : 返回两个字符串的最长公共字符串 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

原理: x 軸和 y 軸分別取 自身和 str2 然后表格對齊,

相同的字符 設成 1 其他為 0 ,取斜對角線 最長不為 0的字符串極為公共子字符串?

例如asbbefg 和 aubeg 最大值2

?asbbefg
a1000000
u0000000
b0011000
e0000100
g0000001

由此可以看出,最長非0的斜對角線對應的單元格為 "be"所以 "be"是最長公共子字符串。

可以對算法進行優(yōu)化:

在對表格進行賦值時,如果str1[i]==str2[j];? ?comparetbl[i] [j] =?comparetbl[i-1] [j-1] +1?

?asbbefg
a1000000
u0000000
b0011000
e0000200
g0000001

?

inline SString SString::maxCommonSubstr(SString &str2) {//原理: 動態(tài)規(guī)劃 x 軸和 y 軸分別取 自身和str2//然后表格對齊,相同的字符 設成 1 其他為 0 ,取斜對角線最長不為0//asbbefg 和 aubeg 最大值2/*a s b b e f ga 1 0 0 0 0 0 0u 0 0 0 0 0 0 0b 0 0 1 1 0 0 0e 0 0 0 0 2 0 0g 0 0 0 0 0 0 1*/int len1 = this->length();int len2 = str2.length();if (len1 ==0 || len2 == 0 ){return SString();}int maxlen=-1; //最大長度int lastIndex =-1; //最大值在主串的位置int comparetbl[len2][len1];for (int i = 0; i <len2 ; ++i) {char modelchar=str2[i];for (int j = 0; j < len1; ++j) {if (str_[j]==modelchar){if (i<1 || j<1 ){comparetbl[i][j]=1;}else{comparetbl[i][j]=1+comparetbl[i-1][j-1];}} else{comparetbl[i][j]=0;}if (maxlen<comparetbl[i][j]){maxlen=comparetbl[i][j];lastIndex = j;}}}SString ret = this->subString(lastIndex-maxlen+1,maxlen);return ret;}

?

總結(jié)

以上是生活随笔為你收集整理的C++ : 返回两个字符串的最长公共字符串的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。