考虑偶数的回文子串最简单的情况就是两个相同的字符,只要把相邻且相同的字符只保留一个就不会出现偶数回文串了,因为更长的回文串中间那两个字符肯定也得相等才行。
直接计算相邻字符的数量即可,相邻的总数减一就是需要去除的。时间复杂度O(n)
Java
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        String s = scanner.next();
        char ch = ' ';
        int ans = 0;
        for (int i = 0; i < n; i++) {
            char v = s.charAt(i);
            if (v == ch) {
                ans++;
            }
            ch = v;
        }
        System.out.println(ans);
    }
}
C++
#include <iostream>
#include <string>
using namespace std;
int main() {
    int n;
    cin >> n;
    string s;
    cin >> s;
    char ch = ' ';
    int ans = 0;
    for (int i = 0; i < n; i++) {
        char v = s[i];
        if (v == ch) {
            ans++;
        }
        ch = v;
    }
    cout << ans << endl;
    return 0;
}
Python
n = int(input())
s = input()
ch, ans = -1, 0
for v in s:
    if v == ch:
        ans += 1
    ch = v
print(ans)
会员可通过查看《已通过》的提交记录来查看其他语言哦~
小美有一个长为n的字符串s,他希望删除尽可能少的字符,使得字符串不含长度为偶数的回文子串
他想知道最少要删除几个字符。
第一行一个正整数n(≤105),表示s的长度
接下来一行一个长为n的字符串s
一个整数,表示答案
输入
5
aaabc
输出
2
说明
删除变为abc
输入
1
e
输出
0