首页 > 代码库 > Detect combined string
Detect combined string
写一个程序判断字符串A是否为其他两个字符串的组合,组合过程中其他两个字符串的相对顺序不能被破坏。
举例说明:abc和def可以组成字符串adebcf,但不能组成aefbcd,因为def的相对顺序已经被破坏。本题直接从string A入手loop配对即可,代码如下。
1 /************************************** 2 Author:Zhou You 3 Time:2014.09.10 4 **************************************/ 5 #include <iostream> 6 #include <string> 7 #include <cstdio> 8 9 using namespace std;10 11 bool IsCombinedString(const string &str1,const string &str2,const string &str3)12 {13 if(str3.length() != str1.length() + str2.length()) return false;14 15 unsigned index_str1 = 0,index_str2 = 0,index_str3 = 0;16 unsigned str1_length = str1.length(),str2_length = str2.length(),17 str3_length = str3.length();18 while(index_str3<str3_length){19 if(index_str1>=str1_length){20 if(str2[index_str2]!=str3[index_str3]){21 return false;22 }else{23 ++index_str2;++index_str3;24 }25 }else if(index_str2>=str2_length){26 if(str1[index_str1]!=str3[index_str3]){27 return false;28 }else{29 ++index_str1;++index_str3;30 }31 }else if(str1[index_str1]==str3[index_str3]){32 ++index_str1;++index_str3;33 }else if(str2[index_str2]==str3[index_str3]){34 ++index_str2;++index_str3;35 }else return false;36 }37 }38 39 void Solve()40 {41 string str1,str2,str3;42 cin>>str1>>str2>>str3;43 if(IsCombinedString(str1,str2,str3)) cout<<"Yes.";44 else cout<<"No.";45 }46 47 int main()48 {49 freopen("data.in","r",stdin);50 freopen("data.out","w",stdout);51 unsigned case_num = 0;52 cin>>case_num;53 54 for(unsigned i=1;i<=case_num;++i){55 cout<<"Case #"<<i<<" ";56 Solve();57 cout<<endl;58 }59 60 return 0;61 }
输入文件中的case如下所示。
3abc def adbecfaf br arfbabc def abcdef
输出文件结果为。
Case #1 Yes.Case #2 No.Case #3 Yes.
Detect combined string
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。