写一个最长公共子串(子串要求连续)
动态规划法
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int LCS1(string s1, string s2) {
int len1 = s1.size(), len2 = s2.size();
vector<vector<int>> ma(len1 + 1, vector<int>(len2 + 1, 0));
int result = 0;
for (int i = 1; i <= s1.size(); ++i) {
for (int j = 1; j <= s2.size(); ++j) {
if (s1[i - 1] == s2[j - 1]) {
ma[i][j] = ma[i - 1][j - 1] + 1;
}
else {
ma[i][j] = 0;
}
result = max(result, ma[i][j]);
}
}
cout << result << endl;
return result;
}
int main() {
string s1 = "helloWorld";
string s2 = "loop";
LCS(s1, s2);
return 0;
}
写一个最长公共子序列(子序列不要求连续)
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int longestCommonSubsequence(string text1, string text2) {
if(text1.empty()||text2.empty()) return 0;
int len1=text1.size(),len2=text2.size();
vector<vector<int>> ma(len1+1,vector<int>(len2+1,0));
for(int i=1;i<=len1;++i){
for(int j=1;j<=len2;++j){
if(text1.at(i-1)==text2.at(j-1)){
ma[i][j]=ma[i-1][j-1]+1;
}
else{
ma[i][j]=max(ma[i-1][j],ma[i][j-1]);
}
}
}
return ma[len1][len2];
}
int main() {
string s1 = "helloWorld";
string s2 = "loop";
longestCommonSubsequence(s1, s2);
return 0;
}