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
给定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编程挑战——《交替字符串》的更多相关文章
- 【搬砖】安卓入门(2)- Java开发编程基础--进制转换和运算符
02.01_Java语言基础(常量的概述和使用)(掌握) A:什么是常量 在程序执行的过程中其值不可以发生改变 B:Java中常量的分类 字面值常量 自定义常量(面向对象部分讲) C:字面值常量的分类 ...
- CSDN编程挑战——《进制转换》
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/user_longling/article/details/24804949 进制转换 题目详情: 我 ...
- Java基础笔记(3) 进制与进制转换
---恢复内容开始--- 进制 在一般生活中,我们一直在应用的十进制,就是逢十进一,而今天我们要接触的是,计算机编程常用的进制!首先我们要知道,计算机内部运算采用的是二进制,也就是逢二进制! 1.什么 ...
- C++ 中数串互转、进制转换的类
/******************************************************************** created: 2014/03/16 22:56 file ...
- java中Integer包装类的具体解说(java二进制操作,全部进制转换)
程序猿都非常懒,你懂的! 今天为大家分享的是Integer这个包装类.在现实开发中,我们往往须要操作Integer,或者各种进制的转换等等.我今天就为大家具体解说一下Integer的使用吧.看代码: ...
- Java的进制转换操作(十进制、十六进制、二进制)
2014-05-06 17:34 吴文付 最近由于工作上的需要,遇到进制转换的问题.涉及到的进制主要是 十进制,十六进制,二进制中间的转换. 这里整理一下.具体的计划为:封装一个转换类,一个测试类. ...
- 最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类
前言:用于处理Java基本数据的转换及进制转换操作工具 一.实现功能 1.int与byte互转 2.int与byte[]互转 3.short与byte互转 4.short与byte[]互转 5.16位 ...
- JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算
JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...
- java:数据结构(二)栈的应用(进制转换全收集)
说到进制转换,java已经封装了基本的方法,在竞赛中使用封装的方法自然能节省大量时间 另一位仁兄介绍的封装好的方法: https://blog.csdn.net/m0_37961948/article ...
- 洛谷P2084 进制转换
题目背景 无 题目描述 今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 : 1*2^4+0*2^3+1*2^2+0*2^1+1*2^0, 那么请你编程实现,将一个M进制的 ...
随机推荐
- php学习笔记5
PHP 常量 常量值被定义后,在脚本的其他任何地方都不能被改变. 一个常量由英文字母.下划线.和数字组成,但数字不能作为首字母出现. (常量名不需要加 $ 修饰符). 注意: 常量在整个脚本中都可以使 ...
- 七、Docker+nginx
原文:七.Docker+nginx docker run -p 80:80 --name nginx-v1.0.0 -v /usr/nginx/www:/www -v /home/docker/ngi ...
- 又一次认识java(一) ---- 万物皆对象
假设你现实中没有对象.至少你在java世界里会有茫茫多的对象,听起来是不是非常激动呢? 对象,引用,类与现实世界 现实世界里有许很多多的生物,非生物,跑的跳的飞的,过去的如今的未来的,令人眼花缭乱.我 ...
- 深度学习 Deep Learning UFLDL 最新Tutorial 学习笔记 3:Vectorization
1 Vectorization 简述 Vectorization 翻译过来就是向量化,各简单的理解就是实现矩阵计算. 为什么MATLAB叫MATLAB?大概就是Matrix Lab,最根本的差别于其它 ...
- 5. Node基础编程
基于Chrome V8引擎 单线程 使用JavaScript开发后端代码 非阻塞的IO common规范 common一定是通过module.exports={}输出 创建Http Server ...
- mybatis中整合ehcache缓存框架的使用
mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...
- 洛谷 P2118 比例简化
P2118 比例简化 题目描述 在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果.例如,对某一观点表示支持的有1498 人,反对的有 902人,那么赞同与反对的比例可以简单的记为149 ...
- 【几何/数学】概念的理解 —— (非)刚体变换((non-)rigid transformation)
1. 刚体变换与非刚体变换 What is a non-rigid transformation? 刚体变换(rigid transformation)一般分为如下几种: 平移对象,而不改变形状和大小 ...
- oled模块的驱动芯片和pcb图
参考自:http://blog.sina.com.cn/s/blog_57ad1bd20102wtq8.html oled的驱动芯片是:SSD1306驱动芯片,这个芯片嵌入在屏幕里面,从外面看不出来, ...
- POJ 1852 Ants || UVA 10881 - Piotr's Ants 经典的蚂蚁问题
两题很有趣挺经典的蚂蚁问题. 1.n只蚂蚁以1cm/s的速度在长为L的竿上爬行,当蚂蚁爬到竿子的端点就会掉落.当两只蚂蚁相撞时,只能各自反向爬回去.对于每只蚂蚁,给出距离左端的距离xi,但不知道它的朝 ...