码迷,mamicode.com
首页 > 其他好文 > 详细

(字符串)最长公共字串(Longest-Common-SubString,LCS)

时间:2015-04-30 19:57:51      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

题目:

给定两个字符串X,Y,求二者最长的公共子串,例如X=[aaaba],Y=[abaa]。二者的最长公共子串为[aba],长度为3。

子序列是不要求连续的,字串必须是连续的。

思路:

1、简单思想:

遍历两个字符串X、Y,分别比较X的字串与Y的字串,求出最长的公共字串。

#include <iostream>
#include <vector>

using namespace std;

int getComLen(char *str1,char *str2){
    int len=0;
    while(*str1 && *str2){
        if(*(str1++)==*(str2++))
            len++;
    }
    return len;
}

int LCS1(char *str1,int len1,char *str2,int len2){
    int maxlen=0;
    int maxIndex=0;
    int len;
    for(int i=0;i<len1;i++){
        for(int j=0;j<len2;j++){
            len=getComLen(str1+i,str2+j);
            if(len>maxlen){
                maxlen=len;
                maxIndex=i;
            }
        }
    }
    cout<<"Length of Longest Common Substring: "<<maxlen<<endl;
    cout<<"Index of LCS is: ";
    for(int i=maxIndex;i<maxIndex+maxlen;i++)
        cout<<str1[i];
    cout<<endl;
    return maxlen;
}

// dynamic programming
int LCS2(char *str1,int len1,char *str2,int len2){
    vector<vector<int> > dp(len1+1,vector<int>(len2+1,0));
    int maxlen=0;
    int maxIndex;
    for(int i=0;i<=len1;i++){
        for(int j=0;j<=len2;j++){
            if(i==0 || j==0)
                dp[i][j]=0;
            else{
                if(str1[i-1]==str2[j-1])
                    dp[i][j]=dp[i-1][j-1]+1;
            }
            if(dp[i][j]>maxlen){
                maxlen=dp[i][j];
                maxIndex=i-maxlen+1;
            }
        }
    }
    cout<<"Length of Longest Common Substring: "<<maxlen<<endl;
    cout<<"Index of LCS is: ";
    for(int i=maxIndex-1;i<maxIndex-1+maxlen;i++)
        cout<<str1[i];
    cout<<endl;
    return maxlen;
}

int main()
{
    char str1[]="Chinese";
    char str2[]="Chienglish";
    int len1=sizeof(str1)/sizeof(str1[0])-1;
    int len2=sizeof(str2)/sizeof(str2[0])-1;
    cout << LCS1(str1,len1,str2,len2) << endl;
    return 0;
}

 

(字符串)最长公共字串(Longest-Common-SubString,LCS)

标签:

原文地址:http://www.cnblogs.com/AndyJee/p/4469531.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!