【题解】最多次数
【题目描述】
小蓝有一个字符串 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; }