数据不大,暴力过。纳闷的是长度是1~100,数组开150都不行,必须要200才不会WA。
思路:注意双向匹配。for(int i=0;i<2;i++,swap(str1,str2))。记录两个字符串匹配到的数目,两个长度相加减去匹配到的数目即可。
匹配过程:b串不动,a串从b串第一个字符开始匹配,可行的话继续向后匹,直到a串匹完;不可行的话在b串上向后推一个。
到今天才知道,输入字符串之后cin>>str1,不会完全刷新之前的,而仅仅是将其最后一个字符后面的一个字符变成' ',其后的如果之前输入过则会保留。
所以要memset(str,0,sizeof(str)).
代码
#include<bits/stdc++.h> using namespace std; int main() { char str1[205],str2[205]; while(cin>>str1>>str2) { int ans[2]={300,300}; for(int k=0;k<2;k++,swap(str1,str2)) { int len1,len2,i=0,j=0,J=0; len1=strlen(str1); len2=strlen(str2); int plen=0; while(J<len2) { j=J,i=0; while(i<len1) { if(!(str1[i]=='2'&&str2[j]=='2')) { if(str1[i]&&str2[j]) plen++; i++; j++; } else{ J++; i=0; plen=0; break; } } if(i==len1) { int a=len1+len2-plen; ans[k]=ans[k]<a?ans[k]:a; break; } } if(ans[k]==300) ans[k]=len1+len2; } cout<<min(ans[0],ans[1])<<endl; memset(str1,0,sizeof(str1)); memset(str2,0,sizeof(str2)); } return 0; }