青少年编程知识记录 codecoming

【题解】最多次数

【题目描述】

小蓝有一个字符串 s,他特别喜欢由以下三个字符组成的单词:l,q,b,任意顺序都可以,一共有 6 种可能:lqb、lbq、qlb、qbl、blq、bql。

现在他想从 s 中,尽可能切割出多个他喜欢的单词,请问最多能切割出多少个?单词指的是由若干个连续的字符组成的子字符串。

【输入描述】

输入一行包含一个字符串 s。

【输出描述】

输出一行包含一个整数表示答案。

【样例输入】

lqbblqblqlxqb

【样例输出】

3

【数据范围】

对于20%的数据,1<=|s|<=10

对于40%的数据,1<=|s|<=20

对于60%的数据,1<=|s|<=100

对于70%的数据,1<=|s|<=1000

对于80%的数据,1<=|s|<=10000

对于所有数据,1<=|s|<=10^5, s中只包含小写字母





【参考答案】

#include<bits/stdc++.h>//头文件  using namespace std;  string s;  int cnt;  bool f(char a,char b,char c){//判断是否合法  	if(a=='l'&&b=='q'&&c=='b') return true;//合法  	else if(a=='l'&&b=='b'&&c=='q') return true;//合法  	else if(a=='q'&&b=='l'&&c=='b') return true;//合法  	else if(a=='q'&&b=='b'&&c=='l') return true;//合法  	else if(a=='b'&&b=='l'&&c=='q') return true;//合法  	else if(a=='b'&&b=='q'&&c=='l') return true;//合法  	else return false;//不合法  }  int main(){  	cin>>s;//输入  	for(int i=0;i<s.size()-2;i++){//循环判断  		if(f(s[i],s[i+1],s[i+2])){//判断后3位是否合法  			cnt++;//答案加1  			i+=2;//跳过不必循环范围  		}  	}  	cout<<cnt;//输出  	return 0;  	  }



作者:亿万年的星光 分类:题解目录 浏览: