题目:
如果字符串str3能够由str1和str2中的字符按顺序交替形成,那么称str3为str1和str2的交替字符串。例如str1="abc",str2="def",那么"adbecf", "abcdef", "abdecf", "abcdef", "adefbc"等等都为str1和str2的交替字符串。更形式化的,str3的生成算法如下: str3="" while str1不为空 or str2不为空: 把str1或str2的首字符加入到str3,并从str1或str2中删除相应的字符 end 给定str1, str2,和str3,判断str3是否为str1和str2的交替字符串。 输入格式: 多组数据,每组数据三行,分别是str1,str2,str3。str1,str2的长度在[1..100]范围内,str3的范围在[1..200]范围内。字符串只包含小写英文字母。 输出格式: 每组数据输出一行YES或者NO。
挑战规则:输入样例 a b ab a b ca 输出样例: YES NO
实验代码:
#include <stdio.h>
#include <stdlib.h>
int canReplace(char* str1, char* str2, char* str3)
{
char *p1, *p2, *p3;
int i = 0;
if (strlen(str3) != strlen(str1) + strlen(str2))
return 0;
p1 = str1;
p2 = str2;
p3 = str3;
for (i = 0; i < strlen(str3); i++)
{
if (p1[0] != '\0' && p2[0] != '\0' && p3[0] == p1[0] && p3[0] == p2[0])
{
return canReplace(p1+1, p2, p3+1) | canReplace(p1, p2+1, p3+1);
}
else if (p1[0] != '\0' && p3[0] == p1[0])
{
p3++;
p1++;
continue;
}
else if (p2[0] != '\0' && p3[0] == p2[0])
{
p2++;
p3++;
continue;
}
else
{
return 0;
}
}
return 1;
}
int main()
{
char str1[100];
char str2[100];
char str3[100];
while (gets(str1) != NULL)
{
gets(str2);
gets(str3);
printf("%s\n", 1 == canReplace(str1, str2, str3) ? "YES" : "NO");
}
return 0;
}