您的位置:首页 > 其它

2016sdau课程练习专题三 1002

2016-05-27 20:29 148 查看
1.题目编号

1002

2.简单题意

题目的大体意思就是给你两个字符串,要求你找出两个字符串中相同字符的个数

3.解题思路

设dp[i][j]是字符串s1的第i和字符串s2的第j个字符为止的最长公共子序列的长度,则由题意得(1)s1[i-1]==s2[j-1]时,dp[i][j]=dp[i-1][j-1]+1;(2)s1[i-1]!==s2[j-1]时,dp[i][j]=max(dp[i+1][j],dp[i][j+1]).

4.感想

和题目a相似,但不好做,题目这么长都看不懂

5.代码

#include <iostream> 

#include <cstring> 

using namespace std;

char s1[1000]; 

char s2[1000]; 

int dp[1000][1000];

int main() 



    int i,j; 

    int Max; 

    int len1,len2; 

    while(cin>>s1>>s2) 

    { 

        len1=strlen(s1); 

        len2=strlen(s2); 

        for(i=0;i<len1;i++) 

        { 

            dp[i][0]=0; 

        } 

        for(i=0;i<len2;i++) 

        { 

            dp[0][i]=0; 

        } 

        for(i=1;i<=len1;i++) 

        { 

            for(j=1;j<=len2;j++) 

            { 

                if(s1[i-1]==s2[j-1]) 

                { 

                    dp[i][j]=dp[i-1][j-1]+1; 

                } 

                else 

                { 

                   dp[i][j]=max(dp[i+1][j],dp[i][j+1]); 

                } 

            } 

        } 

        cout<<dp[len1][len2]<<endl; 

    } 

    return 0; 

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: