先将一个字符串拷贝到另一个字符串内,然后排序。在和原串找LCS。本题来源创新工场。它给的结果为95432,而本代码跑出来的结果是94432.都满足递减条件。但是题的答案是严格递减的。这里应该怎么考虑呢?
void printlcs(string s1,string s2,vector<vector<int> > b){
vector<char> path;
int i=b.size()-1;
int j=b[0].size()-1;
while(i>=0&&j>=0){
if(b[i][j]==0){
path.push_back(s1[i]);
i--;j--;
}else{
if(b[i][j]==1){
i=i-1;
}else if(b[i][j]==2){
j=j-1;
}
}
}
for(int j=path.size()-1;j>=0;--j){
cout<<path[j];
}
cout<<endl;
}
void lcs(string s1,string s2){
int len1=s1.length(),len2=s2.length();
vector<vector<int> > c(len1+1,vector<int>(len2+1));
vector<vector<int> > b(len1+1,vector<int>(len2+1));
for(int i=1;i<=len1;++i){
for(int j=1;j<=len2;++j){
if(s1[i-1]==s2[j-1]){
c[i][j]=c[i-1][j-1]+1;
b[i][j]=0;
}else{
if(c[i-1][j]>c[i][j-1]){
c[i][j]=c[i-1][j];
b[i][j]=1;
}else{
c[i][j]=c[i][j-1];
b[i][j]=2;
}
}
}
}
printlcs(s1,s2,b);
}
int main(){
string s1="94325432";
string s2=s1;
sort(s2.begin(),s2.end(),greater<char>());
cout<<s1<<endl;
cout<<s2<<endl;
lcs(s1,s2);
return 0;
}