原题链接:https://vjudge.net/problem/UVA-1588
分类:字符串
备注:水题
思路:注意一下两种方向的移动都可能为答案。
代码如下:似乎下面的两个相似的部分可以弄成一个函数缩短代码量。
#include<stdio.h>
#include<string.h>
int main(void)
{
char s1[300], s2[300];
while (scanf("%s%s", s1, s2) == 2)
{
int len1 = strlen(s1), len2 = strlen(s2);
int ans1, ans2, flag = 1, st = 0;
//在上面的要不停移动到配对为止,先是s1在上面,st表示从下面字符的第几个开始配对
while (flag)
{
flag = 0;
for (int i = st, j = 0; i < len2 && j < len1; i++, j++)
if (s1[j] == '2' && s2[i] == '2') { flag = 1; break; }
st++;
}
int temp = len2 - (--st);
if (temp >= len1)ans1 = len2;//配对后上面字符的尾巴没超过下面字符
else ans1 = st + len1;//上面字符尾巴超过了下面字符
flag = 1, st = 0;
while (flag)//s2在上面移动
{
flag = 0;
for (int i = st, j = 0; i < len1 && j < len2; i++, j++)
if (s2[j] == '2' && s1[i] == '2') { flag = 1; break; }
st++;
}
temp = len1 - (--st);
if (temp >= len2)ans2 = len1;
else ans2 = st + len2;
printf("%d\n", ans1 < ans2 ? ans1 : ans2);
}
return 0;
}