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;
}
京公网安备 11010502036488号