最长公共子序列
来源:互联网 发布:零基础学python张志强 编辑:程序博客网 时间:2024/05/21 09:33
#include<iostream>
#include<string>
using namespace std;
int c[100][100];
int maxVal(int x, int y){
return x>y?x:y;
}
int lcs_length(string s1,string s2){
int len1 = s1.length();
int len2 = s2.length();
for(int i=0;i<len1;++i){
for(int j=0;j<len2;++j){
c[i][j]=0;
}
}
for(int i=0;i<len1;++i){
for(int j=0;j<len2;++j){
if(s1[i]==s2[j]){
c[i+1][j+1]=c[i][j]+1;
}else{
//cout<<"s1["<<i<<"]="<<s1[i]<<", s2["<<j<<"]="<<s2[j]<<endl;
c[i+1][j+1]=maxVal(c[i+1][j],c[i][j+1]);
//cout<<c[i][j-1]<<","<<c[i-1][j]<<" ";
//cout<<"c[i+1][j+1]="<<c[i+1][j+1]<<endl;;
}
}
}
for(int i=0;i<len1;++i){
for(int j=0;j<len2;++j){
cout<<c[i][j]<<" ";
}
cout<<endl;
}
return c[len1][len2];
}
string lcsStr(string s1, string s2){
int lcsLen = lcs_length(s1,s2);
int len1=s1.length();
int len2=s2.length();
string lcsS="";
int i=len1-1,j=len2-1;
while( i>=0&&j>=0 ){
if(s1[i]==s2[j]){
lcsS = s1[i]+lcsS;
i--;
j--;
}else{
if(c[i+1][j]>c[i][j+1]){
j--;
}else{
i--;
}
}
}
return lcsS;
}
int main(){
string s1 = "axxxbcy";
string s2 = "axbcyy";
cout<<lcsStr(s1,s2)<<endl;
return 0;
}
#include<string>
using namespace std;
int c[100][100];
int maxVal(int x, int y){
return x>y?x:y;
}
int lcs_length(string s1,string s2){
int len1 = s1.length();
int len2 = s2.length();
for(int i=0;i<len1;++i){
for(int j=0;j<len2;++j){
c[i][j]=0;
}
}
for(int i=0;i<len1;++i){
for(int j=0;j<len2;++j){
if(s1[i]==s2[j]){
c[i+1][j+1]=c[i][j]+1;
}else{
//cout<<"s1["<<i<<"]="<<s1[i]<<", s2["<<j<<"]="<<s2[j]<<endl;
c[i+1][j+1]=maxVal(c[i+1][j],c[i][j+1]);
//cout<<c[i][j-1]<<","<<c[i-1][j]<<" ";
//cout<<"c[i+1][j+1]="<<c[i+1][j+1]<<endl;;
}
}
}
for(int i=0;i<len1;++i){
for(int j=0;j<len2;++j){
cout<<c[i][j]<<" ";
}
cout<<endl;
}
return c[len1][len2];
}
string lcsStr(string s1, string s2){
int lcsLen = lcs_length(s1,s2);
int len1=s1.length();
int len2=s2.length();
string lcsS="";
int i=len1-1,j=len2-1;
while( i>=0&&j>=0 ){
if(s1[i]==s2[j]){
lcsS = s1[i]+lcsS;
i--;
j--;
}else{
if(c[i+1][j]>c[i][j+1]){
j--;
}else{
i--;
}
}
}
return lcsS;
}
int main(){
string s1 = "axxxbcy";
string s2 = "axbcyy";
cout<<lcsStr(s1,s2)<<endl;
return 0;
}
0 0
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 亿利资源集团董事长王文彪在北京大学EMBA演
- 天才程序员法布里斯·贝拉
- 大数据创业,数据哪里来?需要跨过几道坎?
- 深入研究java.lang.ThreadLocal类
- CSS中什么时候用id什么时候用class
- 最长公共子序列
- Codeforces544D:Destroying Roads(最短路)
- XDOJ 猴子吃桃
- mysql --建索引
- Ubuntu编译android版ffmpeg
- kmp算法
- 使用JNI调用dll(C++)
- 添加复位键按钮
- mysql root用户的密码修改和消除