计算t子串的个数

题目:

给你一个长度为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

InputcopyOutputcopy
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值