题目要求最少操作数使得字符串变成非回文字符串或者长度为1的回文字符串.首先利用双指针判断该字符串是不是回文字符串,不是则直接答案为0.接下来考虑删除操作,对于只有1种字符的回文字符串,怎么删都是回文串只能删到最后一个,答案为len−1,拥有多种字符的那么肯定存在相邻字符不同的字符,删除一个即可满足条件答案为1 整体复杂度o(n)
#include <bits/stdc++.h>
using namespace std;
#define N 100005
int a[N];
小红拿到了一个长度为n的字符串s,但他不喜欢长度大于 1 的回文串。
因此他现在想要任意地删除一些s中的字母,使得s不是个长度大于1的回文串,他想知道最少需要删除几个字符,请你帮帮他吧。
输入包含若干行。
第一行一个正整数 T(1≤T≤103),表示测试数据组数。
接下来,对于每组数据。输入包含两行。
第一行一个正整数 n(1≤n≤105),表示字符串的长度。
第二行一个长度为n的字符串s。
(保证所有测试数据的n的总和不超过 105。)
对于每组测试数据,输出一个整数,表示最少的删除次数。
如果是T 组测试数据的话则需要输出T 个整数。
输入
1
4
abba
输出
1
说明