题解:洛谷 P1321 单词覆盖还原
【题目来源】
【题目描述】
一个长度为 \(l\) 的字符串中被反复贴有 boy 和 girl 两单词,后贴上的可能覆盖已贴上的单词(没有被覆盖的用句点表示),最终每个单词至少有一个字符没有被覆盖。问贴有几个 boy 几个 girl?
【输入】
一行被反复贴有 boy 和 girl 两单词的字符串。
【输出】
两行,两个整数。第一行为 boy 的个数,第二行为 girl 的个数。
【输入样例】
......boyogirlyy......girl.......
【输出样例】
4
2
【算法标签】
《洛谷 P1321 单词覆盖还原》 #模拟# #字符串# #洛谷原创#
【代码详解】
#include <bits/stdc++.h> // 包含标准库头文件(万能头文件)
using namespace std; // 使用标准命名空间
int main()
{
string s; // 定义字符串:存储输入的字符串
int cb = 0; // 定义变量:统计"boy"出现的次数
int cg = 0; // 定义变量:统计"girl"出现的次数
cin >> s; // 输入字符串
// 统计"boy"出现的次数(检查连续3个字符)
for (int i = 0; i < s.length() - 2; i++)
{
// 检查当前字符、下一个字符、下下个字符是否包含'b'、'o'、'y'
if (s[i] == 'b' || s[i + 1] == 'o' || s[i + 2] == 'y')
{
cb++; // 满足条件则计数加1
}
}
// 统计"girl"出现的次数(检查连续4个字符)
for (int i = 0; i < s.length() - 3; i++)
{
// 检查当前字符、下三个字符是否包含'g'、'i'、'r'、'l'
if (s[i] == 'g' || s[i + 1] == 'i' || s[i + 2] == 'r' || s[i + 3] == 'l')
{
cg++; // 满足条件则计数加1
}
}
// 输出统计结果
cout << cb << endl << cg;
return 0; // 程序正常结束
}
【运行结果】
......boyogirlyy......girl.......
4
2
浙公网安备 33010602011771号