//数据较小可以遍历每一种情况暴力求解#include<bits/stdc++.h>usingnamespace std;constint N =1e5+10, INF =0x3f3f3f3f;int n, m, t;intmain(){
cin >> t;while(t --){int ans = INF;
cin >> n;
string s;
cin >> s;int len = s.size();for(char i ='a'; i <='z'; i ++){int l =0, r = len -1;int cnt =0;while(l < r){if(s[l]== s[r]) l ++, r --;//收尾相等将继续推进elseif(s[l]== i) l ++, cnt ++;//左边可以删elseif(s[r]== i) r --, cnt ++;//右边可以删elsebreak;//无法得到回文串}if(l >= r && ans > cnt) ans = cnt;//满足得到回文串}if(ans == INF)puts("-1");else cout << ans << endl;
s.clear();}return0;}
原题目题目大意选择一个字母,通过在字符串中删除该字母使其变成回文串而且要求删除的字母数尽可能小思路数据范围较小可以暴力解决问题依次遍历每一个字母看他是否能通过操作得到回文串在选出操作数最小的情况具体步骤代码(含细节注释)//数据较小可以遍历每一种情况暴力求解#include<bits/stdc++.h>using namespace std;const int N = 1e5 + 10, INF = 0x3f3f3f3f;int n, m, t;i