题意很好懂,注意“happy”是按顺序的,要考虑一些特殊情况,一定要仔细!
可以把处理过程想象成拼积木的过程:
a总在h后
第一个p总在a后
第二个p总在第一个p后
y总在第二个p后
每当我们拿到一个字符后,我们就开始按如上条件摆放到指定位置,当一个完整的“happy”拼完后,ans++;
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
int main()
{
#ifndef ONLINE_JUDGE
freopen("2617in.txt","r",stdin);
#endif
char c[10005];
int h, a, p, y, ans;
int i, len;
while(gets(c))
{
h = a = p = y = ans = 0;
len = strlen(c);
for( i = 0; i < len; i++ )
{
if( c[i] == 'h' )
h++;
else if( c[i] == 'a' && h > 0 )//有h,找到a,合成ha
{
a++;
h--;
}
else if( c[i] == 'p' && a > 0 )//有ha,找到p,合成happ
{
p++;
//if( p == 2 ) 这里小心,hahappppppyhayy就错了
if( p%2 == 0 )
a--;
}
else if( c[i] == 'y' && p > 1 )//有happ,找到y,合成happy
{
p-=2;
ans++;
}
}
cout<<ans<<endl;
}
return 0;
}
附上一些测试数据:
hopppayppy happy
happ acm y
hahappyppy
hhhhhaaaaaaaaaaaappppppppyyyyyy
hhapapppyy
hpappy
haappppyy
hhaappppyy
haahppyy
haahppppyy
haahppaypphayppy
hahhapapypapyppy
aphphyappyhapapappyppy
happhapphapphappyyyy
haphapyppy
happhapypy
hahappppppyhayy