一个元素一个元素往后判断,注意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;
}

本文介绍了一种用于字符串匹配的特殊算法,通过逐元素检查输入字符串并针对特定模式进行判断,实现对复杂字符串的有效验证。文章提供了详细的代码示例,解释了如何使用C++来实现这一算法,并展示了如何处理如'inputon'和'inputone'等特殊情况。
123

被折叠的 条评论
为什么被折叠?



