一、题目
二、解题思路
- 通过题目可以知道,两个字符串中除了‘2’与‘2’是不匹配的,其他情况都是匹配的;
- 所以可以滑动的匹配两个字符串,分别以第一个字符串为基准滑动匹配,得到长度l1;在以第二个字符串为基准滑动匹配得到l2。以哪个字符串为基准,就是表明该字符串在匹配过程中头的位置是不动的,另一个字符串往后滑动。
- 比较两种情况下的长度l1和l2,选择最小的即为所求。
具体见代码
三、代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main(){
char a[105],b[105];
int i,j,l1,l2;
while(scanf("%s%s",a,b)!=EOF){
int lena=strlen(a);
int lenb=strlen(b);
for(i=0;i<lena;i++){ //以字符串a为基准,b滑动匹配
int flag=1;
for(j=0;j<lenb && (i+j)<lena;j++){ //依次对比
if((a[i+j]=='2') && (b[j]=='2')){ //不匹配,b往后滑,再依次匹配
flag=0;
break;
}
}
if(flag){
break;
}
}
l1=max(lena,lenb+i); //取(基准字符串a的长度)与(滑动字符串b的长度加滑动长度)中最大值,保证能够涵盖匹配后的字符串
for(i=0;i<lenb;i++){
int flag=1;
for(j=0;j<lena && (i+j)<lenb;j++){
if((b[i+j]=='2') && (a[j]=='2')){
flag=0;
break;
}
}
if(flag){
break;
}
}
l2=max(lenb,lena+i);
int l=min(l1,l2); //保证求出的是最短容器长度
printf("%d\n",l);
}
return 0;
}