交替字符串
题目详情
如果字符串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。
代码如下
#include<iostream> #include<string.h> using namespace std; bool IsAlternatelyString(string str1, string str2, string str3) { int i=0,j=0,k=0; while(i<str1.length()&&j<str2.length()&&k<str3.length()) { if(str1[i]==str3[k]) { i++; k++; }else { if (str2[j] == str3[k]) { j++; k++; }else{ return false; } } } while (k<str3.length()&&i<str1.length()) { if (str1[i] == str3[k]) { i++; k++; } else { return false; } } while (k<str3.length()&&j<str2.length()) { if (str2[j] == str3[k]) { j++; k++; } else { return false; } } return true; } int main(){ string str1[100]={"abc","a","a"}; string str2[100]={"def","b","b"}; string str3[]={"adbecf","ab","ac"}; int i=sizeof(str3)/sizeof(str3[0]); for(int j=0;j<i;j++) { if(IsAlternatelyString(str1[j],str2[j],str3[j])) { cout<<"YES"<<endl; }else{ cout<<"NO"<<endl; } } system("pause"); }