#5704. 回文字符串

回文字符串

回文字符串(palindrome)

题目描述

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

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

首先把字符串S分割成n个子串S1.S2....Sn,即S1+S2+...+Sn=S其中+为字符串拼接操作)。

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

对于所有的i在[1,n]有:要么Si与Sn-i+1相等,要么Si与Sn-i+1互为回文。(补充说明:字符串A和B互为回文指A倒过来与B相等,反之亦然。举例说明:"abc"与"cba”互为回文。) 给定一个字符串S,请你帮助小明确定该字符串是否是在上述规则下的回文字符串。 如果是,他还想将字符串S分成尽可能多的子串。

输入格式

一行一个字符串 S。

输出格式

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

样例 #1

样例输入 #1

abcababcba

样例输出 #1

YES
8

样例 #2

样例输入 #2

goodluckhavefun

样例输出 #2

NO

样例 #3

样例输入 #3

wahacodewaha

样例输出 #3

YES
3

提示

样例1:最多可以把字符串分成(a)(b)(c)(ab)(ab)(c)(b)(a)共8个子串。

样例2:显然不存在满足题意的分割方案。

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

数据范围:

对于30%的数据,1=<S<=10;(其中S为给定字符串的长度)

对于60%的数据,1<=S<=1000,其中有30%的数据输入的字符串为回文字符串;

对于100%的数据,1<=S<=10000,保证输入的字符串全为小写字母。