经典的最长公共子序列问题,我刚开始用string敲的,就是为了练练手,没想到竟然wa了,还以为我用错了呢。。。换了字符数还是wa。。。真无语,这么简单的题快把我弄糊涂了,后来听人说是输入可能有空格。。。这是巨坑啊,题上都没说清楚,白白wa了几发。。。就是设一个数组d[i][j]遍历两个字符数组当a[i]==b[j]的时候d[i][j]=d[i-1][j-1]+1。不相等的时候就是d[i][j]=max(d[i-1][j],d[i][j-1])。别忘了初始化。真坑
代码:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<vector> #include<set> #include<string> #include<algorithm> using namespace std; int d[1005][1005]; int main() { string a,b; int i,j; while(getline(cin,a),getline(cin,b)) { //for(i=0; i<=max(a.size(),b.size()); i++) // d[0][i] = d[i][0] = 0; memset(d,0,sizeof(d)); for(i=1; i<=a.size(); i++) for(j=1; j<=b.size(); j++) { if(a[i-1] == b[j-1]) { d[i][j] = d[i-1][j-1]+1; } else { d[i][j] = max(d[i-1][j],d[i][j-1]); } } cout << d[a.size()][b.size()] << endl; a.clear(); b.clear(); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-24 16:03:43