题目描述
一个长度为 lll 的字符串中被反复贴有 boy
和 girl
两单词,后贴上的可能覆盖已贴上的单词(没有被覆盖的用句点表示),最终每个单词至少有一个字符没有被覆盖。问贴有几个 boy
几个 girl
?
输入格式
一行被被反复贴有 boy
和 girl
两单词的字符串。
输出格式
两行,两个整数。第一行为 boy
的个数,第二行为 girl
的个数。
样例输入
......boyogirlyy......girl.......
样例输出
4
2
提示
数据保证,3≤l≤2553\le l\le2553≤l≤255,字符串仅仅包含如下字符:.bgilory\texttt{.bgilory}.bgilory。
思路分析
直接遍历字符串,将每个位置开始的一段字符与boy或者girl依次比对,如果发现存在字符相同,说明此处被粘贴过boy或者girl。
参考代码
#include<bits/stdc++.h>
using namespace std;
string s;
int a, b; //a-boy数量,b-girl数量
int main() {
cin >> s; //字符串不包含空格,可以直接cin
for (int i = 0; i < s.length() - 2; i++) {
//匹配"boy",只要有一个字符匹配上,说明这个位置被粘过"boy"
if (s[i] == 'b' || s[i + 1] == 'o' || s[i + 2] == 'y')
a++;
}
for (int i = 0; i < s.length() - 2; i++) {
//匹配"girl",只要有一个字符匹配上,说明这个位置被粘过"girl"
if (s[i] == 'g' || s[i + 1] == 'i' || s[i + 2] == 'r' || s[i + 3] == 'l')
b++;
}
cout<<a<<"\n"<<b;
return 0;
}