求兩個字串最大公共子字串長度並輸出

2021-09-28 22:42:31 字數 1564 閱讀 2847

求兩個字串最大公共子字串長度並輸出:

1.常用方法:

**如下:

#define _crt_secure_no_warnings

#include "iostream"

#include "string"

#include "algorithm"

using namespace std;

int commonstrlen(string s1, string s2)

int len1 = s1.size();

int len2 = s2.size();

int res = 0;

int endpos = 0;

for (int i = 0; i < len1;++i)

m++;

n++;

}res = max(res, len);

} }cout << "最長公共子字串:" << endl;

for (int k = res; k > 0;k--)

cout << endl;

return res;

}int main()

2、比較二維矩陣中每個點對應行列字元中否相等,相等的話值設定為1,否則設定為0。

3、通過查詢出值為1的最長對角線就能找到最長公共子串。

兩個字串有兩個公共子字串,最長的公共子字串為5;

如果字串比較長的話這樣靠自己來數長度的話會很麻煩,所以我們將二維矩陣元素的值由array[i][j]=1轉換為為array[i][j]=1 +array[i-1][j-1],這樣就避免了後續查詢對角線長度的麻煩操作,**中只要用乙個maxlength變數記錄最大值就可以了。

**:

#define _crt_secure_no_warnings

#include "iostream"

#include "algorithm"

using namespace std;

int commonstrlen(string s1, string s2)

int len1 = s1.length();

int len2 = s2.length();

int maxlength = 0;

int array[256][256] = ;

for (int i = 0; i < len1; i++)

else

maxlength = max(maxlength, array[i][j]);

}else

}} for (int i = 0; i < len1; ++i)

cout << endl;

} return maxlength;

}int main()

求兩個字串的最大公共字串

今天在csdn上面翻倒乙個問題 求兩個字串的最大公共子串,本來想用有限自動機來做,可惜當年編譯學的不著.b上網翻了翻相關介紹,有乙個演算法很巧妙 把字串1 長度m 橫排,串2 長度n 豎排,得到乙個m n的矩陣c,矩陣的每個元素的值如下,如果m i n j 則c j i 1,否則,c j i 0。然...

求兩個字串的最大公共子串

求兩個串中的第乙個最長子串。如 abractyeyt dgdsaeactyey 的最大子串為 actyet 有乙個演算法很巧妙 把字串1 長度m 橫排,串2 長度n 豎排,得到乙個m n的矩陣c,矩陣的每個元素的值如下,如果m i n j 則c j i 1,否則,c j i 0。然後找出矩陣中連續是...

求兩個字串的最大公共子串

求兩個字串的最大公共子串 演算法原理 lcs i,j 0 i 0 j 0 lcs i 1,j 1 i 0 b 0 str1 i str2 j 1 構造乙個str1.size str2.size 的矩陣vec 2 如果 str1 i str2 j 則vec i j vec i 1 j 1 1 lcs ...