题目:一天Phenix得到了一个长度为nn的字符串,字符串仅由大写字母A~Z组成,现在Phenix想知道最少需要删除多少个字符使字符串变成NEUQNEUQ……这种由若干个"NEUQ"组成的形式。
输入: 第一行一个整数nn,表示字符串长度(n<=10^6)
第二行一个字符串
输出: 一个整数,表示最少需要删除的字符数量。
我最先的思路是判断每一个输入的字符,并用一个flag变量判断以及匹配了几个字符,若输入N时,flag=0 那么代表为开头,否则需要移除该字符count++,若输入 E则判断前面输入的字符是否为N,若是,则该字符正确flag++,否则需要移除该字符count++,这样依次判断,但是测试点一直通不过去。不知道是什么边缘情况未考虑到,大家能否给我点建议,非常感谢了。
这是我思路的源码
#include<stdio.h>
int main()
{
int n, i;
scanf("%d", &n);
getchar();
char ch, pre_ch;
int count=0, flag=0;
for (i=0; i<n; i++)
{
ch = getchar();
if (n<4)
{
printf("%d", count);
return 0;
}
if (ch == 'N')
{
if (flag==0)
{
pre_ch = ch;
flag++;
}
else count++;
}
else if (ch == 'E')
{
if (pre_ch == 'N')
{
pre_ch = ch;
flag++;
}
else count++;
}
else if (ch == 'U')
{
if (pre_ch == 'E')
{
pre_ch = ch;
flag++;
}
else count++;
}
else if (ch == 'Q')
{
if (pre_ch == 'U')
{
pre_ch = ch;
flag++;
}
else count++;
}
else count++;
if (flag == 4) flag=0;
}
printf("%d", count);
return 0;
}