B4101 [CSP-X2023 山东] 回文字符串
题目描述
作为一个新手,小明刚学了回文字符串,知道了一个字符串如果关于中心对称,则该字符串为回文字符串。
于是他自己就发明了属于他自己的回文字符串,即符合以下条件的字符串 $S$ 是回文字符串:
首先把字符串 $S$ 分割成 $n$ 个子串 $S_1,S_2,\ldots,S_n$,即 $S_1+S_2+\ldots+S_n = S$(其中 $+$ 为字符串拼接操作)。
分割成的子串数量需要大于 $1$,且不能为空,即 $n > 1$ 且 $S_i$ 为非空子串。
对于所有的 $i \in[1, n]$ 有:要么 $S_i$ 与 $S_{n−i+1}$ 相等,要么 $S_i$ 与 $S_{n−i+1}$ 互为回文。(补充说明:字符串 $A$ 和 $B$ 互为回文指 $A$ 倒过来与 $B$ 相等,反之亦然。举例说明:$\texttt{abc}$ 与 $\texttt{cba}$ 互为回文。)
给定一个字符串 $S$,请你帮助小明确定该字符串是否是在上述规则下的回文字符串。
如果是,他还想将字符串 $S$ 分成尽可能多的子串。
输入格式
一行一个字符串 $S$。
输出格式
如果不能满足要求,输出一行一个字符串 $\texttt{NO}$;否则,输出两行,第一行一个字符串 $\texttt{YES}$,第二行一个整数 $n$ 表示最大的子串数量。
说明/提示
### 样例解释
- 样例 $1$ 解释:最多可以把字符串分成 $(a)(b)(c)(ab)(ab)(c)(b)(a)$ 共 8 个子串。
- 样例 $2$ 解释:很显然不存在满足题意的分割方案。
- 样例 $3$ 解释:最多可以把字符串分成 $\texttt{(waha)(code)(waha)}$ 共 3 个子串。
### 数据范围
对于 $30\%$ 的数据,$1\le |S|\le 10$;(其中 $S$ 为给定字符串的长度)
对于 $60\%$ 的数据,$1\le |S |\le 10^3$;
其中有 $30\%$ 的数据,输入的字符串为回文字符串;
对于 $100\%$ 的数据,$1\le| S |\le10^4$,保证输入的字符串全为小写字母。