求助
  • 板块灌水区
  • 楼主di_fly
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/24 19:39
  • 上次更新2024/10/24 20:31:20
查看原帖
求助
1100109
di_fly楼主2024/10/24 19:39

回文字符串

题目背景

回文字符串(palindrome)

题目描述

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

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

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

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

对于所有的 i ∈ [1, n] 有:要么 SiSni+1S_i 与 S_{n−i+1} 相等,要么SiSni+1 S_i与 S_{n−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

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

样例解释 3

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

数据范围

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

对于 60% 的数据,1 ≤ |S| ≤ 1000;

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

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

2024/10/24 19:39
加载中...