求最长递减子序列

先将一个字符串拷贝到另一个字符串内,然后排序。在和原串找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;
 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值