求兩個字串最大公共子字串長度並輸出:
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 ...