题意:给你三个字符串,让你计算1 2 串和3 串是否匹配,就是3串可以分解为 1 2 串,字母顺序必须是按照1 2 串的字母前后顺序。
DP代码太深奥 看不太透,这个代码比较好理解一点:
#include<stdio.h> #include<string.h> #include<math.h> #include<time.h> #include<iostream> #include<ctype.h> #include<map> #include<set> #include<string> #include<vector> #include<algorithm> #include<stdlib.h> #include<queue> #include<stack> using namespace std; map<char,int>ma,mc; int main() { int i,j,k; string a,b,c; while(cin>>a>>b>>c) { ma.clear(); mc.clear(); int lea=a.size(); int leb=b.size(); int lec=c.size(); for(i=0;i<lea;i++) ma[a[i]]++; for(i=0;i<leb;i++) ma[b[i]]++; int x=0; int y=0; for(i=0;i<lec;i++) { mc[c[i]]++; if(x<lea&&c[i]==a[x]) x++; if(y<leb&&c[i]==b[y]) y++; } int fl=1; map<char,int>::iterator tt; for(tt=mc.begin();tt!=mc.end();tt++) { if(mc[tt->first]!=ma[tt->first]) { fl=0; break; } } if(fl) { if(x==lea&&y==leb) printf("Yes "); else printf("No "); } else printf("No "); } }