交替字符串

题目详情:

假设字符串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

欠缺考虑(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<size3){
if(i1<size1 && str3[i3]==str1[i1]){
i1++;
}else if(i2<size2 && str3[i3]==str2[i2]){
i2++;
}else {
return 0;
}
i3++;
} return 1;
} int main()
{
while(scanf("%s%s%s",str1,str2,str3))
{
if(strlen(str1)+strlen(str2)==strlen(str3) && fun()){
printf("YES\n");
}else{
printf("NO\n");
}
} return 0;
}
/*
不通过的測试用例:
12345 6278 162782345 错误原因:
通过 str1和str2 按顺序进行匹配 str3 。此程序的错就错在匹配这。 即 str1和str2 对(str3中)某一个字符同一时候能够匹配时没有进行选 择而是简单的用 str1中的字符去匹配
*/

改动后(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
      

CSDN编程挑战——《交替字符串》的更多相关文章

  1. 【搬砖】安卓入门(2)- Java开发编程基础--进制转换和运算符

    02.01_Java语言基础(常量的概述和使用)(掌握) A:什么是常量 在程序执行的过程中其值不可以发生改变 B:Java中常量的分类 字面值常量 自定义常量(面向对象部分讲) C:字面值常量的分类 ...

  2. CSDN编程挑战——《进制转换》

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/user_longling/article/details/24804949 进制转换 题目详情: 我 ...

  3. Java基础笔记(3) 进制与进制转换

    ---恢复内容开始--- 进制 在一般生活中,我们一直在应用的十进制,就是逢十进一,而今天我们要接触的是,计算机编程常用的进制!首先我们要知道,计算机内部运算采用的是二进制,也就是逢二进制! 1.什么 ...

  4. C++ 中数串互转、进制转换的类

    /******************************************************************** created: 2014/03/16 22:56 file ...

  5. java中Integer包装类的具体解说(java二进制操作,全部进制转换)

    程序猿都非常懒,你懂的! 今天为大家分享的是Integer这个包装类.在现实开发中,我们往往须要操作Integer,或者各种进制的转换等等.我今天就为大家具体解说一下Integer的使用吧.看代码: ...

  6. Java的进制转换操作(十进制、十六进制、二进制)

    2014-05-06 17:34 吴文付 最近由于工作上的需要,遇到进制转换的问题.涉及到的进制主要是 十进制,十六进制,二进制中间的转换. 这里整理一下.具体的计划为:封装一个转换类,一个测试类. ...

  7. 最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类

    前言:用于处理Java基本数据的转换及进制转换操作工具 一.实现功能 1.int与byte互转 2.int与byte[]互转 3.short与byte互转 4.short与byte[]互转 5.16位 ...

  8. JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

    JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...

  9. java:数据结构(二)栈的应用(进制转换全收集)

    说到进制转换,java已经封装了基本的方法,在竞赛中使用封装的方法自然能节省大量时间 另一位仁兄介绍的封装好的方法: https://blog.csdn.net/m0_37961948/article ...

  10. 洛谷P2084 进制转换

    题目背景 无 题目描述 今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 : 1*2^4+0*2^3+1*2^2+0*2^1+1*2^0, 那么请你编程实现,将一个M进制的 ...

随机推荐

  1. [JWT] JWT Signature With RS256 - Learn The Advantages Compared to HS256

    The advantage of RS256 over HS256 is RS256 no longer need to share the secret key between client and ...

  2. java list 容器的ConcurrentModificationException

    java中的很多容器在遍历的同时进行修改里面的元素都会ConcurrentModificationException,包括多线程情况和单线程的情况.多线程的情况就用说了,单线程出现这个异常一般是遍历( ...

  3. UART和RS232/RS485的关系,RS232与RS485编程

    http://wpp9977777.blog.163.com/blog/static/4625100720138495943540/ 串口通讯是电子工程师和嵌入式开发工程师面对的最基本问题,RS232 ...

  4. 79.cgi硬盘查询个人信息

    运行截图: 把cgi编码转为char*类型 //把cgi编码转为char*类型 char* change(char *str) { //分配内存 ); //x是tempstr的下标,y是str的下标 ...

  5. 学习笔记(二):javascript之dom操作

    一.document.getElementById()    根据Id获取元素节点 <div id="div1"> <p id="p1"> ...

  6. nodejs连接mysql突然中断问题解决方案

    db/index.js数据库配置文件 一.在数据库连接失败的情况下,回调函数,再次发起连接,直到连接成功为止. handleDisconnect(){ this.connection.connect( ...

  7. 【例题 7-5 UVA - 129】Krypton Factor

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每次枚举增加一个字符; 然后看看新生成的字符的后缀里面有没有出现连续子串就好,前面已经确认过的没必要重复确认 (枚举长度为偶数的一个 ...

  8. HttpWatch--time chart分析

    这是一个IE的插件,下载可以点这里.下载后解压如下图所示,一共有4个文件.HttpWatch Professional是单独软件,可以单独使用. 解压后有四个文件 插件安装时,只需运行httpwatc ...

  9. Loadrunner--关联详解

    当录制脚本时,VuGen会拦截client端(浏览器)与server端(网站服务器)之间的对话,并且通通记录下来,产生脚本.在VuGen的Recording Log中,您可以找到浏览器与服务器之间所有 ...

  10. js进阶 12-18 jquery如何实现自定义右键菜单(把问题分细)

    js进阶 12-18  jquery如何实现自定义右键菜单(把问题分细) 一.总结 一句话总结:用鼠标右键事件contextmenu,阻止系统默认事件,让做好的右键菜单显示出来,并且显示在我们出现的位 ...