Find Q
Accepts: 392
Submissions: 780
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 262144/131072 K (Java/Others)
问题描述
Byteasar迷恋上了'q'这个字母。 在他眼前有一个小写字母组成的字符串S,他想找出S的所有仅包含字母'q'的连续子串。但是这个字符串实在是太长了,你能写个程序帮助他吗?
输入描述
输入的第一行包含一个正整数T(1≤T≤10),表示测试数据的组数。 对于每组数据,包含一行一个小写字母组成字符串S,保证S的长度不超过100000。
输出描述
对于每组数据,输出一行一个整数,即仅包含字母'q'的连续子串的个数。
输入样例
2 qoder quailtyqqq
输出样例
17
解题思路:每一段连续的q长度为n,那么可构成(n)*(n+1)/2个子串。
代码如下:
#include <cstdio> #include <cstring> int main() { int t; scanf("%d",&t); while(t--) { char s[100010]; scanf("%s",s); int size=strlen(s); long long num=0; long long ans=0; for(int i=0;i<size;i++) { if(s[i]=='q') { num++; } else { ans=ans+num*(num+1)/2; num=0; } } ans=ans+num*(num+1)/2; printf("%lld\n",ans); } return 0; }