一个元素一个元素往后判断,注意inputon和inputone等特殊情况的判断。
用逆序判断会更加简单 。
用逆序判断会更加简单 。
代码如下:
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
char a[10000002];
int solve()
{
int len = strlen(a), flag = 0;
for(int i = 0; i < len; i++)
{
if(flag == 1 && a[i] == 'p')
{
++i;
if(a[i] != 'u')
return 0;
++i;
if(a[i] != 't')
return 0;
++i;
flag = 2;
}
else
flag = 0;
if(a[i] == 'o')
{
++i;
if(a[i] == 'n')
{
++i;
if(a[i] == 'e')
{
flag = 0;
continue;
}
else if(flag == 2)
{
--i;
flag = 0;
continue;
}
else
return 0;
}
else if(a[i] == 'u')
{
flag = 0;
++i;
if(a[i] != 't')
return 0;
flag = 1;
continue;
}
else
return 0;
}
else if(a[i] == 'i')
{
flag = 0;
++i;
if(a[i] == 'n')
flag = 1;
else
return 0;
continue;
}
else if(a[i] == 'p')
{
flag = 0;
++i;
if(a[i] != 'u')
return 0;
++i;
if(a[i] != 't')
return 0;
++i;
if(a[i] != 'o')
return 0;
++i;
if(a[i] != 'n')
return 0;
}
else if(a[i] == '\0')
break;
else
return 0;
flag = 0;
}
return 1;
}
int main()
{
#ifdef test
freopen("in.txt", "r", stdin);
#endif
int n;
scanf("%d", &n);
getchar();
while(n--)
{
gets(a);
int flag = solve();
if(flag)
puts("YES");
else
puts("NO");
}
return 0;
}