ADV-202 最长公共子序列

来源:互联网 发布:网络销售外包合同 编辑:程序博客网 时间:2024/06/05 03:49
问题描述
  给定两个字符串,寻找这两个字串之间的最长公共子序列。
输入格式
  输入两行,分别包含一个字符串,仅含有小写字母。
输出格式
  最长公共子序列的长度。
样例输入
abcdgh
aedfhb
样例输出
3
样例说明
  最长公共子序列为a,d,h。
数据规模和约定

  字串长度1~1000。


1.C++

#include<iostream>#include<cstdlib>#include<string>#include<vector>using namespace std;void LCS(string str1,string str2){int len1=str1.length();int len2=str2.length();//int dp = new int[len1+1][len2+1];vector<vector<int> > dp(len1+1,vector<int>(len2+1));//动态规划初始值for(int j=0;j<=len2;j++)dp[0][j]=0;for(int i=0;i<=len1;i++)dp[i][0]=0;for(int i=0;i < len1;i++)for(int j=0;j < len2;j++){if(str1.at(i)==str2.at(j)){dp[i+1][j+1]=dp[i][j]+1;}else if(dp[i][j+1] > dp[i+1][j])dp[i+1][j+1]=dp[i][j+1];elsedp[i+1][j+1]=dp[i+1][j];}cout<<dp[len1][len2]<<endl;int ti=0;int tj=0;while(ti<len1 && tj<len2){if(str1.at(ti)==str2.at(tj)){ti++;tj++;}else if(dp[ti+1][tj]>=dp[ti][tj+1])ti++;elsetj++;}}int main(){string str1,str2;cin>>str1>>str2;LCS(str1,str2);return 0;}
2.C

#include <stdio.h>#include <stdlib.h>#include <string.h>#define  N (1000+1) void chushihua( int , int n , int [][n] );void tianbiao( int , int n , int [][n] , char [] , char [] );int main(void) {char zfc_1[N] , zfc_2[N] ;scanf("%s%s" , zfc_1 , zfc_2 ) ;int len_1 = strlen( zfc_1 );int len_2 = strlen( zfc_2 );int biao[len_2][len_1] ;chushihua( len_2 , len_1 , biao );tianbiao( len_1 , len_2 , biao , zfc_1 , zfc_2 );printf("%d\n" , biao[len_1-1][len_2-1] );return 0;}void chushihua( int len_1 , int len_2 , int biao[][len_2] ){int i, j;for( i=0 ; i<len_1 ; i++ ){for( j=0 ; j<len_2 ; j++ ){biao[i][j] = 0; }}}void tianbiao( int len_1 , int len_2 , int biao[][len_2] , char zfc_1[] , char zfc_2[] ){int i , j;for( i=0 ; i<len_1 ; i++ ){if( i > 0 ){biao[0][i] = biao[0][i-1] ;}if( zfc_1[i] == zfc_2[0] ){biao[0][i] += 1;}}for( i=1 ; i<len_2 ; i++ ){for( j=0 ; j<len_1 ; j++ ){if ( zfc_1[j] == zfc_2[i] ){if ( j > 0 ){biao[i][j] += biao[i-1][j-1] + 1 ; }else{biao[i][j] += biao[i-1][j] + 1 ;}}else{if( j > 0 ){biao[i][j] = biao[i-1][j] > biao[i][j-1] ? biao[i-1][j] : biao[i][j-1] ;}else{biao[i][j] = biao[i-1][j] ;}}}}}



原创粉丝点击