正文

求两个字符串的最长公共子序列2006-06-24 19:54:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/argol/16158.html

分享到:

//原程序见 http://blog.programfan.com/article.asp?id=14838 #include<iostream>#include<string>using namespace std;void maxstring(string str1,string str2){     int max,tag,i,j;     int length1=str1.size();     int length2=str2.size();     int a[length1+1][length2+1];          for(i=0;i< length1;i++)           for(j=0;j< length2;j++)        a[i][j]=0;   //初始化状态a[0][0...length1]和a[0..length2][0]     for (j = 0; j < length2; j++)       if (str1[0] == str2[j])a[0][j] = 1;     for (i = 0; i < length1; i++)       if (str1[i] == str2[0])a[i][0] = 1;          max = a[0][0];     tag = 0;     /*应该是从0开始吧,还不能有=,否则会越界。虽然这样做也没什么错(不知道为什么没有错,郁闷当中)*/     for(i=1;i<length1;i++)        for(j=1;j<length2;j++)          if(str1[i]==str2[j])          {            a[i][j] = a[i-1][j-1]+1;                        if(max<a[i][j])            {             max=a[i][j];             tag=i;            }          }     if(max==0){cout<<"no found same string!";return ;}     cout<<"output the max same string:";//这里i应该为tag-max+1,兄弟也太粗心了吧     for(i=tag-max+1;i<=tag;i++)                      cout<<str1[i];      cout<<endl<<"the length is:"<<max<<endl;}int main(){    string str1,str2;    cout<<"enter the two strings!"<<endl;    cout<<"string 1:";    cin>>str1;    cout<<"string 2:";    cin>>str2;    maxstring(str1,str2);    system("pause");    return 0;}

阅读(5175) | 评论(3)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册