求两个字符串的最长公共子串
思路:既然是最长公共子中,那肯定是连续的,也就是一旦某个字符与另一个串中的字符不匹配那么匹配长度就为0,
否则后一字符参照上前面字符的匹配长度自再增1
#include <string>
#include <iostream>
#include <vector>
#include <cctype>
using namespace std;
int getCommonStrLength(string str1, string str2){
int len1 = str1.size();
int len2 = str2.size();
if(len1 == 0 || len2 == 0) return 0;
vector<vector<int> > vvi(len1, vector<int>(len2, 0));
int maxLen = 0;
for(int i = 0; i < len1; i++) {
if(tolower(str1[i]) != tolower(str2[0])){
vvi[i][0] = 0; //初始化行 不匹配
}else{
vvi[i][0] = 1; //匹配
maxLen = 1;
}
}
for(int i = 0; i < len2; i++){
if(tolower(str2[i]) != tolower(str1[0])){
vvi[0][i] = 0; //初始化列
}else{
vvi[0][i] = 1;
maxLen = 1;
}
}
for(int i = 1; i < len1; i++){
for(int j = 1; j < len2; j++){
if(tolower(str1[i]) != tolower(str2[j])){
vvi[i][j] = 0; //不匹配置0
}else{
vvi[i][j] = vvi[i - 1][j - 1] + 1; //匹配加1
maxLen = max(maxLen, vvi[i][j]);
}
}
}
return maxLen;
}
int main(){
string str1, str2;
while(cin >> str1 >> str2){
cout << getCommonStrLength(str1, str2) << endl;
}
return 0;
}