#abc468d. Pre-Palindrome

    ID: 4371 Type: Default 1000ms 256MiB Tried: 0 Accepted: 0 Difficulty: 3 Uploaded By: Tags>普及/提高-回文中心扩展枚举

Pre-Palindrome

题目描述

若一个由小写英文字母组成的字符串满足下面的条件,就称它是好串

  • 最多改写其中 11 个字符,就能把它变成回文串。

例如 aiwaiabcdcza 都是好串,而 abcdatcoder 不是。特别注意:回文串本身也是好串(改写 00 个字符即可)。

给定一个由小写英文字母组成的字符串 SS,请求出 SS非空子串(连续的一段)中,有多少个是好串。

两个子串只要在 SS 中的位置不同,即使内容相同也要分别计数。

什么是子串?

SS子串是指从 SS 的开头删去 00 个或多个字符、从结尾删去 00 个或多个字符后得到的字符串。例如 ababc 的子串,而 ac 不是。

输入格式

S

输出格式

输出好串的个数。

输入示例 1

ababa

输出示例 1

13

示例 1 说明

SS 长度为 55,一共有 5×62=15\dfrac{5 \times 6}{2} = 15 个非空子串。

其中不是好串的只有两个:第 141 \sim 4 位的 abab 和第 252 \sim 5 位的 baba(它们都需要改写 22 个字符才能变成回文)。

所以答案是 152=1315 - 2 = 13

输入示例 2

atcoder

输出示例 2

18

示例 2 说明

长度为 11 的子串(77 个)全是回文;长度为 22 的子串(66 个)最多改一个字符就能变回文,也全是好串。再加上若干更长的好串,合计 1818 个。

这提示我们:长度 2\le 2 的子串一定是好串。

输入示例 3

abccbacbacb

输出示例 3

40

示例 3 说明

S=S = abccbacbacb 长度为 1111,非空子串共 11×122=66\dfrac{11 \times 12}{2} = 66 个,其中好串有 4040 个。

例如第 151 \sim 5 位的 abccb 只要把最后一位改成 a 就成了回文 abcba,是好串;而第 171 \sim 7 位的 abccbac 有两对对称位置不匹配,改一个字符不够,不是好串。

约束条件

  • SS 是由小写英文字母组成的字符串,长度在 1110410^4 之间