洛谷--P1321 单词覆盖还原

这道题乍一看情况非常多种,逻辑判断似乎十分复杂,但是其实我们分类清晰的话,问题就可以迎刃而解。
我们仔细思考一下,出现boy的次数应该怎么计算?其实无非就是三种情况(从大方向上判断)
1.b开头的情况---b,bo,boy;这三种情况。
2.o开头的情况---o,oy,这两种情况(但是不能包含boy这种情况,因为boy这种情况再上面已经计算过一次了)
3.y开头的情况---y,就一种情况,对应的代码如下:
点击查看代码
int boy=0;
if (s[i] == 'b') boy++;
if(s[i]=='o'&&(i-1>=0&&s[i-1]!='b')) boy++;
if (s[i] == 'y' && (i - 1 >= 0 && s[i - 1] != 'o')) boy++;
点击查看代码
int girl=0;
if (s[i] == 'g') girl++;
if (s[i] == 'i' && (i - 1 >= 0 && s[i - 1] != 'g')) girl++;
if (s[i] == 'r' && (i - 1 >= 0 && s[i - 1] != 'i')) girl++;
if (s[i] == 'l' && (i - 1 >= 0 && s[i - 1] != 'r')) girl++;
点击查看代码
#include <iostream>
using namespace std;
int main() {
//输入字符串
string s;
cin >> s;
//定义boy和girl,用于记录boy和girl出现的次数
int boy = 0,girl=0;
for (int i = 0; i < s.length(); i++) {
if (s[i] == 'b') boy++;
if (s[i] == 'o' && (i - 1 >= 0 && s[i - 1] != 'b')) boy++;
if (s[i] == 'y' && (i - 1 >= 0 && s[i - 1] != 'o')) boy++;
if (s[i] == 'g') girl++;
if (s[i] == 'i' && (i - 1 >= 0 && s[i - 1] != 'g')) girl++;
if (s[i] == 'r' && (i - 1 >= 0 && s[i - 1] != 'i')) girl++;
if (s[i] == 'l' && (i - 1 >= 0 && s[i - 1] != 'r')) girl++;
}
cout << boy << endl;
cout << girl << endl;
return 0;
}
浙公网安备 33010602011771号