B题
思路:统计出所有不满足回文字符的个数n.如"abc"其中第一个'a'和最后一个'c'不相同不满足回文串则统计个数n+2,判断每次更改操作后是否将不满足会问串的字符全部改完了,即n==0;如果n==0则返回true,否则返回false;同时每次更改操作后更新n,如果将不相等的改为相等的n-=2,将相等的改为不相等的n+=2,如果更改的是奇数长度字符串的中间位置,则不会改变n的个数。
AC代码:
#include <bits/stdc++.h> using namespace std; typedef long long int ll; #define MAX 100000 int n, l; int falsenum = 0; void solve() { string s; char c; cin >> s; cin >> n; bool ans = false; int from = 0, end = s.size() - 1; while (from < end) { if (s[from] != s[end]) { ans = false; falsenum += 2; } from++, end--; } int sn = s.size(); for (int i = 0; i < n; i++) { cin >> l; cin >> c; if ((sn % 2 == 1) && ((l * 2) == sn + 1)) { s[l - 1] = c; if (falsenum != 0) cout << "No" << endl; else cout << "Yes" << endl; continue; } else if (s[sn - l] != s[l - 1]) { if (s[sn - l] == c) { falsenum -= 2; } } else { if (s[sn - l] != c) { falsenum += 2; } } s[l - 1] = c; if (falsenum != 0) cout << "No" << endl; else cout << "Yes" << endl; } } int main() { int n__ = 1; // cin>>n__; while (n__--) { solve(); } return 0; }