题目链接
英文链接:https://leetcode.com/problems/longest-chunked-palindrome-decomposition/
中文链接:https://leetcode-cn.com/problems/longest-chunked-palindrome-decomposition/
题目详述
段式回文 其实与 一般回文 类似,只不过是最小的单位是 一段字符 而不是 单个字母。
举个例子,对于一般回文 “abcba” 是回文,而 “volvo” 不是,但如果我们把 “volvo” 分为 “vo”、”l”、”vo” 三段,则可以认为 “(vo)(l)(vo)” 是段式回文(分为 3 段)。
给你一个字符串 text,在确保它满足段式回文的前提下,请你返回 段 的 最大数量 k。
如果段的最大数量为 k,那么存在满足以下条件的 a_1, a_2, …, a_k:
每个 a_i 都是一个非空字符串;
将这些字符串首位相连的结果 a_1 + a_2 + … + a_k 和原始字符串 text 相同;
对于所有1 <= i <= k,都有 a_i = a_{k+1 - i}。
示例 1:
1 | 输入:text = "ghiabcdefhelloadamhelloabcdefghi" |
示例 2:
1 | 输入:text = "merchant" |
示例 3:
1 | 输入:text = "antaprezatepzapreanta" |
示例 4:
1 | 输入:text = "aaa" |
提示:
- text 仅由小写英文字符组成。
- 1 <= text.length <= 1000
题目详解
- 要使回文串的段的数量最大,就需要每个回文串的长度尽可能地短。
- 从两端往中间遍历,从小到大枚举长度,如果满足回文串的条件,更新结果和和指针位置并进行下一轮操作;如果不满足,说明到达了中间最后一个回文串(这个回文串也可能不存在),结果加一跳出循环即可。
1 | public class LeetCode_01147 { |
也可以运用递归来解答本题。
1 | public class LeetCode_01147 { |