题目描述
一个长度为 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;
}

给定一个字符串,其中包含未被覆盖的boy和girl单词,程序需遍历字符串,检测每个位置开始的子串是否匹配这两个单词,统计它们出现的次数。输入为一字符串,输出为两行,分别表示boy和girl的个数。
375

被折叠的 条评论
为什么被折叠?



