题目 3332: 蓝桥杯2025年第十六届省赛真题-最多次数
题目 3332: 蓝桥杯2025年第十六届省赛真题-最多次数
时间限制: 2s 内存限制: 192MB 提交: 143 解决: 46
题目描述
小蓝有一个字符串 s ,他特别喜欢由以下三个字符组成的单词:l,q,b ,任意顺序都可以,一共有 6 种可能:lqb、lbq、qlb、qbl、blq、bql。
现在他想从 s 中,尽可能切割出多个他喜欢的单词,请问最多能切割出多 少个?单词指的是由若干个连续的字符组成的子字符串。
输入格式
输入一行包含一个字符串 s 。
输出格式
无
样例输入复制
输出一行包含一个整数表示答案。
样例输出复制
lqbblqblqlxqb
提示
【评测用例规模与约定】
对于 20% 的评测用例,1 ≤ |s| ≤ 10 ;
对于 40% 的评测用例,1 ≤ |s| ≤ 20 ;
对于 60% 的评测用例,1 ≤ |s| ≤ 100 ;
对于 70% 的评测用例,1 ≤ |s| ≤ 103 ;
对于 80% 的评测用例,1 ≤ |s| ≤ 104 ;
对于所有评测用例,1 ≤ |s| ≤ 105 ,s 中只包含小写字母。
1.分析
从头开始遍历。
2.代码
#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
const int MAX = 1e5 + 10;
typedef long long LL;
string re[8] = { "lqb", "lbq", "qlb", "qbl", "blq", "bql" };
string str;
int t;
bool check(string s) {for (int i = 0; i < 6; i++) {if (re[i] == s) return true;}return false;
}
int main() {cin >> str;for (int i = 0; i <= str.size() - 3; i++) {string s = str.substr(i, 3);if (check(s)) {i += 2;t++;}}cout << t << endl;return 0;
}