这道题需要考虑的情况比较多,flag1表示情况是:b数组里有的字母而a里没有和b里面的同一个字母个数比a里面的多
flag2表示情况:b里面的左右字母能不能在a中同等顺序的存在
flag3表示情况:a里面同一个字母的个数与b里面是否相同
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; int main(){ // freopen("in.txt","r",stdin); char a[105],b[105]; int coua[50],coub[50]; while(cin>>a>>b){ for(int i=0;i<50;i++) coua[i]=coub[i]=0; int lena=strlen(a); int lenb=strlen(b); for(int i=0;i<lena;i++) coua[a[i]-'a']++; for(int i=0;i<lenb;i++) coub[b[i]-'a']++; int flag1=0,flag2=0,flag3=0; for(int i=0;i<50;i++){ if((coub[i]!=0 && coua[i]==0)||coub[i]>coua[i]){ flag1=1; } if(coub[i]!=coua[i]) flag3=1; } for(int i=0,j=0;i<lenb,j<lena;){ if(b[i]==a[j]){ i++;j++; }else j++; if(i==lenb) flag2=1; } if((flag1==1 || lena<lenb)||((lena==lenb)&&flag3==1)) cout<<"need tree"<<endl; if(flag1==0 && flag2==0 && lena>lenb ) cout<<"both"<<endl; if(flag1==0 && flag2==1) cout<<"automaton"<<endl; if(flag1==0 && flag2==0 && lena==lenb && flag3==0) cout<<"array"<<endl; } }
B. Suffix Structures 模拟吧,情况比较多要想周全
时间: 2024-10-12 00:29:55