题解:
第三章计算难题之一。
首先要理清题目,这次给出的两个字符串是不可翻转,怎样转都不行,反正就是往简单方面想就是了。
然后看出字符串长度不长,完全可以枚举所有情况。起始思路为两条串,分别从左边尝试到右边,如:
121和12211
开始:121
12211
结尾: 121
12211
这样最后求出的最短长度就是所求答案。
但是这样超级难写!!!lz想这样写想了很久还是没办法
这时候换个思路
当枚举到
121
12211
的时候为一个点
其次如果之后枚举下去
121
12211
然后交换一下上下顺序就变成了
12211
121
可以说每次定下一个串,然后上面那个串向左移动就行了
代码如下:
#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
int main() {
// freopen("in.txt","r",stdin);
string a,b;
int len;
while(cin >> a >> b){
int alen = a.size();
int blen = b.size();
len = alen+blen;
for(int i = 0; i < alen; i++){
int nlen = alen-i;
int minl = min(nlen,blen); //每次都只有minl这么长重合,为什么?思考一下
int ok = 1;
for(int j = 0; j < minl; j++){
if(a[i+j]-'0'+b[j]-'0' > 3){ok = 0;break;}
}
if(ok) len = min(len,blen+alen-minl);
}
for(int i = 0; i < blen; i++){
int nlen = blen-i;
int minl = min(nlen,alen);
int ok = 1;
for(int j = 0; j < minl; j++){
if(b[i+j]-'0'+a[j]-'0' > 3){ok = 0;break;}
}
if(ok) len = min(len,blen+alen-minl);
}
printf("%d\n",len);
}
return 0;
}