题意是给我们两个字符串,再在第一个字符串中找第二个,
给了我们两种方法,一:在第一个字符串删掉一些字符后得到第二个字符串;
二:在第一个字符串中改变一些字符的先后顺序得到字符串二;
如果只用第一种方法输出: automaton;
只用第二种输出:array
两种都用输出:both;
找不到输出:need tree
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <math.h>
#include <algorithm>
using namespace std;
int main ()
{
string s1,s2,s3;
int a1[27],a2[27];
int flag,ans;
while (cin>>s1>>s2)
{
flag=ans=0;
memset(a1, 0, sizeof(a1));
memset(a2, 0, sizeof(a2));
if(s1.size()<s2.size())
{
cout<<"need tree"<<endl;
continue;
}
for (int i=0; i<s1.size(); i++)
{
a1[s1[i]-'a']++;
}
for (int i=0; i<s2.size(); i++)
{
a2[s2[i]-'a']++;
}
for (int i=0; i<26; i++)
{
if(a2[i]>a1[i]) //s1中某个字符数量不够
{
cout<<"need tree"<<endl;
flag=1;
break;
}
else if(a1[i]==a2[i])
{
ans++;
}
}
if(flag)
{
continue;
}
if(ans==26) //各个字母数量匹配,并仅有s2中的字母,因为不相同,则肯定为arry
{
cout<<"array"<<endl;
continue;
}
ans=0;
for (int i=0; i<s1.size(); i++) //到这里说明s2中肯定有s1
{
if(s1[i]==s2[ans]) //automation判断
{
ans++;
}
}
if(ans==s2.size())
{
cout<<"automaton"<<endl;
}
else
{
cout<<"both"<<endl;
}
}
return 0;
}