CSDN编程挑战——《交替字符串》
交替字符串
题目详情: 假设字符串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
【CSDN编程挑战——《交替字符串》】给定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
欠缺考虑(Error):
#include "stdio.h"
#include "string.h"
#define maxn 100+2
char str1[maxn],str2[maxn],str3[maxn*2];
int fun()
{
int i1=0,size1=strlen(str1);
int i2=0,size2=strlen(str2);
int i3=0,size3=strlen(str3);
//通过 str1和str2 顺序匹配 str3 ,匹配不到 return 0
while(i3
改动后(AC):
#include "stdio.h"
#include "string.h"
#define maxn 100+2
char str1[maxn],str2[maxn],str3[maxn*2];
int fun(int i1,int i2,int i3)
{
if(i1>strlen(str1) || i2>strlen(str2) || i3>strlen(str3)) return 0;
if(i1==strlen(str1) && i2==strlen(str2) && i3==strlen(str3)){
return 1;
}else if(str1[i1]==str2[i2] && str3[i3]==str1[i1]){
return (fun(i1+1,i2,i3+1) || fun(i1,i2+1,i3+1));
}else if(str3[i3]==str1[i1]){
return fun(i1+1,i2,i3+1);
}else if(str3[i3]==str2[i2]){
return fun(i1,i2+1,i3+1);
}else{
return 0;
}
}int main()
{
while(scanf("%s%s%s",str1,str2,str3))
{
if(strlen(str1)+strlen(str2)==strlen(str3) && fun(0,0,0)){
printf("YES\n");
}else{
printf("NO\n");
}
}
return 0;
}
CSDN挑战编程交流群: 372863405
推荐阅读
- 20210307《挑战赛怂人胆》【能量将帅挑战赛(01)】
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- 周一(十一)
- 【挑战日更】Day6.《终身学习.10个你必须掌握的未来生存法则》摘录之三
- HTML基础--基本概念--跟着李南江学编程
- 参加【21天写作挑战赛】,第七期第14天,挑战感受小总结
- 我的软件测试开发工程师书单
- 芯灵思SinlinxA33开发板Linux内核定时器编程
- 关于响应式编程的十个问题
- iOS-Swift-map|iOS-Swift-map filter reduce、函数式编程