您的位置:首页 > 编程语言

【编程题】最长公共连续子串

2017-05-18 19:37 183 查看
牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度。 

输入描述:
输入为两行字符串(可能包含空格),长度均小于等于50.

输出描述:
输出为一个整数,表示最长公共连续子串的长度。

输入例子:
abcde
abgde

输出例子:
2

#include <iostream>
#include <string.h>
#include <vector>
using  namespace  std;

int main()
{
    string  str1;
    string  str2;
    getline(cin,str1);
    getline(cin,str2);
    
    int len1 = str1.size();
    int len2 = str2.size();
    if(len1<1 || len2<1)
    {
        cout<<0<<endl;
        return 0;
    }
    vector<vector<int>> dp(len1,vector<int>(len2,0));
    
    for(int ii = 0;ii<len2;++ii)
    {
        if(str1[0] ==str2[ii])
            dp[0][ii] = 1;
    }
    
    for(int jj = 0;jj<len1;++jj)
    {
        if(str1[jj] ==str2[0])
            dp[jj][0] = 1;
    }
    for(int ii = 1;ii<len1;++ii)
    {
        for(int jj = 1;jj<len2;++jj)
        {
            if(str1[ii] ==str2[jj])
                dp[ii][jj] = dp[ii-1][jj-1]+1;
        }
    }
    int longest = 0;
   for(int ii = 0;ii<len1;++ii)
    {
        for(int jj = 0;jj<len2;++jj)
        {
            if(dp[ii][jj] >longest)
               longest = dp[ii][jj];
        }
    }
    cout<<longest<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: