算法题系列

如果字符串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。

 

算法思路:

使用递归思想,str3从最后一个元素开始移除元素

 1 static void Main(string[] args)
 2         {
 3             bool res = isMergeStr("abc", "bbfc", "abbcbfc");
 4             Console.WriteLine(res);
 5             Console.Read();
 6         }
 7 
 8         static bool isMergeStr(string str1, string str2, string str3)
 9         {
10             while (!string.IsNullOrEmpty(str3))
11             {
12                 bool flag = false;
13 
14                 // str1与str2最后一个字符相同,则递归
15                 if ((!string.IsNullOrEmpty(str1) && str1[str1.Length - 1] == str3[str3.Length - 1]) && (!string.IsNullOrEmpty(str2) && str2[str2.Length - 1] == str3[str3.Length - 1]))
16                 {
17                     if (isMergeStr(str1.Remove(str1.Length - 1), str2, str3.Remove(str3.Length - 1)))
18                     {
19                         return true;
20                     }
21 
22                     if (isMergeStr(str1, str2.Remove(str2.Length - 1), str3.Remove(str3.Length - 1)))
23                     {
24                         return true;
25                     }
26                 }
27 
28                 if (!string.IsNullOrEmpty(str1) && str1[str1.Length - 1] == str3[str3.Length - 1])
29                 {
30                     flag = true;
31                     str3 = str3.Remove(str3.Length - 1);
32                     str1 = str1.Remove(str1.Length - 1);
33                     if (string.IsNullOrEmpty(str1) && string.IsNullOrEmpty(str2) && string.IsNullOrEmpty(str3))
34                     {
35                         return true;
36                     }
37                     continue;
38                 }
39                 if (!string.IsNullOrEmpty(str2) && str2[str2.Length - 1] == str3[str3.Length - 1])
40                 {
41                     flag = true;
42                     str3 = str3.Remove(str3.Length - 1);
43                     str2 = str2.Remove(str2.Length - 1);
44                     if (string.IsNullOrEmpty(str1) && string.IsNullOrEmpty(str2) && string.IsNullOrEmpty(str3))
45                     {
46                         return true;
47                     }
48                     continue;
49                 }
50                 if (!flag)
51                 {
52                     return false;
53                 }
54             }
55             return false;
56         }        
View Code

 

转载于:https://www.cnblogs.com/fb-boy/p/3728546.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学会拒绝别人的6个技巧_多少人败在不懂拒绝上!牢记10个高情商拒绝技巧,人生越来越顺...

人际交往中,往往需要拒绝别人的请求,否定别人的意见,这并非易事,需要极高的情商,做到既能成功拒绝,又不得罪他人。否则,不懂拒绝的话,就会给自己带来许多麻烦,也会给别人…

记GMIC 2014

我也是因为一次偶然的机会得知了全球移动互联网大会(缩写GMIC)这样一个全球最大规模的移动互联网行业的盛会,并且因为偶然的机会有幸在今年五一假期时得到一张分会场的门票。面对这样难得的机会,果断把五一三天假给自己放成了七天…

Win10/Win7小技巧:教你如何彻底关闭系统进程

无论Windows 10打过多少补丁,官方说的有多么完美,运行卡顿和程序假死还是常有的事儿。这个时候常规的解决方案就是用任务管理器(CtrlAltDel)去解决一些占用系统资源非常过分,“表脸”的进程。 但有的时候会发现任务管理…

导致大量kworker的原因_高尿酸与生活习惯有关?导致高尿酸的8个坏习惯,现在改还来得及...

高尿酸是痛风出现前的一个时期,大约百分之十左右的患者会出现痛风情况。这种疾病是一种人体代谢絮乱疾病,是由内外多种因素导致的,那么关于高尿酸形成的具体原因,下面我们一起来看看吧。高尿酸的病因有哪些?1、饮食不当…

C#开发微信公众平台-就这么简单(附Demo)

相关文档:https://www.google.com/search?site&sourcehp&qC%23%E5%BE%AE%E4%BF%A1%E5%BC%80%E5%8F%91&btnGGoogle%E6%90%9C%E7%B4%A2 原文地址:http://www.cnblogs.com/xishuai/p/3625859.html 写在前面 服务号和订阅号URL配置创建菜单查询…

用一个简单的例子来演绎事件委托

本篇博文,Insus.NET想使用一个超简单的例子来演绎事件委托。我们在开发网页时,刚开始时在网页的顶部放一个铵钮(web control),想实现一个功能。 在xxx.aspx.cs: OK,某一天,此网页的内容随时间而增长,出现了…

Java的接口及实例

一、定义Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为&am…

三位数的茎叶图怎么看_贝德玛化妆品生产日期怎么看?贝德玛化妆品保质期怎么看?...

对于喜欢化妆的小伙伴来说,贝德玛这个名字并不陌生。因为在卸妆产品中,有一个爆款单品卸妆水就出自贝德玛旗下,当然这也是贝德玛最知名的产品。不过很多人并不知道,这个来自法国的化妆品品牌,其实属于药妆系列。所以贝…

从Loagistic 到 SVM算法

SVM(支持向量机),一种二类分类器,之所以称之为向量机,是因为它本身就产生一个二值决策结果,即使一种决策“机”,支持向量机的泛化错误低(具有结构风险最小),具…

数据有序_Redis实战(3)-数据结构List实战一之商品信息的有序存储

摘要电商平台的管理后端一般有两大角色的用户可以使用,一个是系统管理员,一个是平台的卖家/商家,对于商家而言,管理自个儿的商品是日常工作中再为普通不过的事情了,本文我们将以"有序存储并展示电商平台中商家上传…

c单链表

#include <stdio.h>#include <stdlib.h>#define T 1#define F -1typedef int Type;struct Node{Type value;struct Node *next;};int init(struct Node **head); //初始化int insert_head(struct Node *head, Type value); // 头插法int in…

和redis_Redis 缓存

使用场景#Redis 通常用作web应用的内存缓存&#xff0c;和Django&#xff0c;Ruby-on-Rails&#xff0c;Node.js以及Flask框架结合Redis在存储新的数据的过程中可以清除陈旧的数据。Redis使用Less Recently Used(LRU)策略,可以为每个健设置过期时间Redis 存储指标数据用于量化网…

invalid floating point operation什么意思_Point-MVSNet:基于多视角的点云重建网络

Point-Based Multi-View Stereo Network是一篇点云重建领域的文章&#xff0c;其工作内容为通过输入多张不同角度的图片&#xff0c;提取不同的点云特征&#xff0c;再进行融合&#xff0c;从而生成最终的点云。1.介绍Point-MVSNet的大致流程如下&#xff1a;首先生成一个粗略的…

Nonblocking I/O 与 Asynchronous I/O

2019独角兽企业重金招聘Python工程师标准>>> Nonblocking IO 使用的是 polling &#xff08;轮询&#xff09;的方法&#xff08;主动去问&#xff09;&#xff0c; 而 异步IO 使用的是信号机制&#xff08;等待系统通知&#xff09; 转载于:https://my.oschina.ne…

极大似然估计 摘自维基百科

最大似然估计[编辑] 原文地址&#xff1a; http://zh.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1 最大似然估计&#xff0c;也称为最大概似估计&#xff0c;是一种统计方法&#xff0c;它用来求一个样本集的相关概率密度函数的参数。这个方…

unity改变图片像素大小_类动森像素画反向转换 (xBR)

起因前阵子沉迷动森&#xff0c;DIY 样式的画风真的超萌(&#xff9f;д&#xff9f;)&#xff89;&#xff0c;恰巧在推上看到有个小姐姐在讨论这个像素画转换的算法&#xff0c;就想在 Unity 里整整。最后实现的镜头特效效果如下图。像素缩放算法常见的像素缩放算法对比图如下…

99 网络编程_传统网络工程师如何利用python实现公司内网IP地址信息查询?

网工圈网络工程师阿龙圈内最早的公益公众号,本号已认证&#xff01;学网络关注我一个就够了(关注近5w)关注听说99%的网工都来这里充电吖关注我&#xff0c;一个老HCIE(编号3558)带你轻松玩网络技术&#xff01; 交个朋友&#xff0c;一起和一个技术狂热者相互交流&#xff0c;共…

[原创]windows server 2012 AD架构试验系列 – 12 配置操作主机

[原创]windows server 2012 AD架构试验系列 – 12 配置操作主机ActiveDirectory支持域中所有域控制器之间的目录数据存储的多主机复制&#xff0c;因此域中的所有域控制器实质上都是对等的。ActiveDirectory支持域中所有域控制器之间的目录数据存储的多主机复制&#xff0c;因此…

笔记本换内存条

步骤一 拆除护盖 笔记本内存插槽上都有护盖保护&#xff0c;首先第一步就是先将护盖拆掉。大多数笔记本的护盖上都有标识&#xff0c;有的是内凹的内存图形&#xff0c;而且从护盖的大小也能看出来&#xff0c;一般内存护盖的大小&#xff0c;就比内存条大一点。当然有不少笔记…

angularJS 指令实践

AngularJS 指令&#xff08;Directives&#xff09;实践指南(1) 2014-03-12 10:22 陈鑫伟 编译 伯乐在线我要评论(0)字号&#xff1a;T|T一个指令用来引入新的HTML语法。指令是DOM元素上的标记&#xff0c;使元素拥有特定的行为。举例来说&#xff0c;静态的HTML不知道如何来创…