#C3034. [CSP-X2023 小学组] 回文字符串

[CSP-X2023 小学组] 回文字符串

问题描述

​ 作为一个新手,小明刚学了回文字符串,知道了一个字符串如果关于中心对称,则该字符串为回文字符串。

​ 于是他自己就发明了属于他自己的回文字符串,即符合以下条件的字符串 SS 是回文字符串:

​ 首先把字符串 SS 分割成 nn 个子串 S1,S2,...SnS_1,S_2,...S_n,即 S1+S2+...+Sn=SS_1+S_2+...+S_n=S (其中 + 为字符串拼接操作)。

​ 分割成的子串数量需要大于 1,且不能为空,即 n>1n>1SiS_i 为非空子串。

​ 对于所有的 i[1,n]i∈[1,n] 有:要么 SiS_iSni+1S_{n−i+1} 相等,要么 SiS_iSni+1S_{n−i+1} 互为回文。(补充说明:字符串 AABB 互为回文指 AA 倒过来与 BB 相等,反之亦然。举例说明:abc"“abc""cba""cba" 互为回文。)

​ 给定一个字符串 SS,请你帮助小明确定该字符串是否是在上述规则下的回文字符串。

​ 如果是,他还想将字符串 SS 分成尽可能多的子串。

输入格式

一行一个字符串 SS

输出格式

​ 如果不能满足要求,输出一行一个字符串 NONO;否则,输出两行,第一行一个字符串 YESYES,第二行一个整数 nn 表示最大的子串数量。

输入样例1

abcababcba

输出样例1

YES 
8

样例 1 解释

最多可以把字符串分成 (a)(b)(c)(ab)(ab)(c)(b)(a)(a)(b)(c)(ab)(ab)(c)(b)(a)88 个子串。

输入样例2

goodluckhavefun

输出样例2

NO

样例 2 解释

很显然不存在满足题意的分割方案。

输入样例3

wahacodewaha

输出样例3

YES 
3

样例 3 解释

最多可以把字符串分成 (waha)(code)(waha)(waha)(code)(waha)33 个子串。

数据范围

对于 3030% 的数据,1S101≤|S|≤10;(其中 S|S| 为给定字符串的长度)

对于 6060% 的数据,1S10001≤|S|≤1000

其中有 3030% 的数据输入的字符串为回文字符串;

对于 100100% 的数据,1S100001≤|S|≤10000,保证输入的字符串全为小写字母。