交替字符串
题目详情: 如果字符串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
思路:不断取str3中的字母匹配str1和str2。a,b,c分别代表指向字符串的位置,如果匹配则一直往下,否则返回。
由于不匹配的情况不会递归太久就会返回,所以不会超时。
#include
#includeconst int N=102;
char str1[N],str2[N],str3[2*N];
int goal;
void dfs(int a,int b,int c){
if(!str3[c]||goal){
goal=1;
return;
}
if(str1[a]==str3[c])
dfs(a+1,b,c+1);
if(str2[b]==str3[c])
dfs(a,b+1,c+1);
}
int main(){
while(~scanf("%s %s %s",str1,str2,str3)){
int len1=strlen(str1),len2=strlen(str2),len3=strlen(str3);
if(len1+len2!=len3){
printf("NO\n");
continue;
}
int a=0,b=0,c=0;
goal=0;
dfs(a,b,c);
printf("%s\n",goal?"YES":"NO");
}
return 0;
}
推荐阅读
- 人工智能|干货!人体姿态估计与运动预测
- 分析COMP122 The Caesar Cipher
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)
- C语言学习(bit)|16.C语言进阶——深度剖析数据在内存中的存储
- Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法
- 数据结构与算法|【算法】力扣第 266场周赛
- 数据结构和算法|LeetCode 的正确使用方式
- leetcode|今天开始记录自己的力扣之路
- 人工智能|【机器学习】深度盘点(详细介绍 Python 中的 7 种交叉验证方法!)
- 网络|简单聊聊压缩网络