第一题解!
2025-11-07 23:58:10
发布于:广东
0阅读
0回复
0点赞
#include <bits/stdc++.h> // 包含所有标准库,简化头文件引用
using namespace std;
// 函数c(s):计算字符串s中"XM"出现的次数
int c(string s) {
int r = 0; // r用于计数(result的缩写)
// 遍历字符串,检查每个位置i和i+1是否为"XM"
for (int i = 0; i < (int)s.size()-1; ++i)
if (s[i] == 'X' && s[i+1] == 'M')
r++; // 找到"XM"则计数+1
return r; // 返回总次数
}
int main() {
string s; // 存储输入的字符串
cin >> s; // 读取输入
int n = s.size(); // n是字符串长度
int o = c(s); // o是原始字符串中"XM"的数量(original的缩写)
int m = o; // m记录最大可能的数量(max的缩写),初始为原始数量
// 若字符串长度小于2,不可能有"XM",直接输出0
if (n < 2) {
cout << 0;
return 0;
}
// 遍历每个位置,尝试修改字符(最多改1个)
for (int i = 0; i < n; ++i) {
char t = s[i]; // t暂存原始字符(temp的缩写),用于后续还原
// 尝试将当前字符改为'X'(如果原本不是'X')
if (t != 'X') {
s[i] = 'X'; // 修改为'X'
m = max(m, c(s)); // 计算新的"XM"数量,更新最大值
s[i] = t; // 还原为原始字符,不影响下一次尝试
}
// 尝试将当前字符改为'M'(如果原本不是'M')
if (t != 'M') {
s[i] = 'M'; // 修改为'M'
m = max(m, c(s)); // 计算新的"XM"数量,更新最大值
s[i] = t; // 还原为原始字符
}
}
cout << m << endl; // 输出最大次数
return 0;
}
这里空空如也







有帮助,赞一个