//最长公共字符串匹配 看到他们的写的很短很精练,真心感觉自己写不出来,我就走我的平淡路线吧!
#include<iostream> #include<string> using namespace std; int substr[201][201]; 记录到当前位置的最大匹配数 string str1,str2; int mmax(int a,int b) { if(a < b) return b; else return a; } void solve() { int i,j; int len1 = str1.length(); int len2 = str2.length(); int flag = 0; for(i = 0;i < len2;i++) { if(str1[0] == str2[i]) { flag = 1; substr[0][i] = 1; } if(flag) { substr[0][i] = 1; } } flag = 0; for(i = 0;i < len1;i++) { if(str1[i] == str2[0]) { flag = 1; substr[i][0] = 1; } if(flag) { substr[i][0] = 1; } } for(i = 1;i < len1;i++) { for(j = 1;j < len2;j++) { if(str1[i] == str2[j]) { substr[i][j] = substr[i-1][j-1] + 1; } else { substr[i][j] = mmax(substr[i-1][j],substr[i][j-1]); } } } cout<<substr[len1-1][len2-1]<<endl; } int main() { while(cin>>str1>>str2) { int a = str1.length(); int b = str2.length(); if(a == 0 && b == 0) break; memset(substr,0,sizeof(substr)); solve(); } return 0; }
poj1458解题报告
最新推荐文章于 2021-03-06 16:31:32 发布