题目:
给你一个长度为n的字符串s,由小写英文字母组成。ZZ子串t被定义为s的一个子串,它满足以下条件:
- t的长度不小于3。形式上, |t|\ge 3∣t∣≥3.
- t的第一个字符是y,其他的字符是b.
你应该计算ZZ子串的数量.(子串是指连续的一段字符串)
Input
第一行包含一个整数T(1≤T≤100)T(1≤T≤100) - 测试用例的数量.
每个测试案例的第一行包含一个整数n(1≤n≤100)n(1≤n≤100)--字符串ss的长度.
第二行包含一个字符串s.保证s只由小写英文字母组成.
Output
对于每个测试案例,在一行中输出一个整数.- ZZ子串的数量.
Sample 1
Inputcopy | Outputcopy |
---|---|
2 10 yybybbybbb 4 yabb | 3 0 |
Note
在测试案例1中,有3个ZZ子串: [s4,s5,s6], [s7,s8,s9] 和[s7,s8,s9,s10], 它们分别是 ybb, ybb 和 ybbb.
思路:
首先寻找y,然后查找y后有几个b,当b的个数大于等于2是开始计数,一旦有非b的字符出现即停止计数,往下继续寻找y,直到结束。
代码:
#include<stdio.h>
#include<string.h>
int main()
{
int n,m,i,j,sum=0;
char a[115];
scanf("%d",&n);
while(n--)
{
sum=0;
scanf("%d",&m);
getchar();
for(i=0;i<m;i++)
{
scanf("%c",&a[i]);
}
for(i=0;i<m;i++)
{
if(a[i]=='y')
{
if(a[i+1]=='b'&&a[i+2]=='b')
{
sum++;
for(j=i+3;j<m;j++)
{
if(a[j]=='b')
sum++;
else
break;
}
}
}
}
printf("%d\n",sum);
}
return 0;
}