求两个字符串的最长公共子串

求两个字符串的最长公共子串

思路:既然是最长公共子中,那肯定是连续的,也就是一旦某个字符与另一个串中的字符不匹配那么匹配长度就为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;  
}  


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值