段式回文

你会得到一个字符串 text 。你应该把它分成 k 个子字符串 (subtext1, subtext2,…, subtextk) ,要求满足:

  • subtexti 是 非空 字符串
  • 所有子字符串的连接等于 text ( 即subtext1 + subtext2 + ... + subtextk == text )
  • 对于所有 i 的有效值( 即 1 <= i <= k ) ,subtexti == subtextk - i + 1 均成立
    返回k可能最大值。

示例 1:

输入: text = "ghiabcdefhelloadamhelloabcdefghi"
输出:7
解释: 我们可以把字符串拆分成 "(ghi)(abcdef)(hello)(adam)(hello)(abcdef)(ghi)"。

示例 2:

输入:text = "merchant"
输出:1
解释:我们可以把字符串拆分成 "(merchant)"。

示例 3:

输入:text = "antaprezatepzapreanta"
输出:11
解释:我们可以把字符串拆分成 "(a)(nt)(a)(pre)(za)(tpe)(za)(pre)(a)(nt)(a)"。

提示:

  • 1 <= text.length <= 1000
  • text 仅由小写英文字符组成

来源:力扣(LeetCode)

题解

class Solution {
    public int longestDecomposition(String text) {
        //判断非空,防止字符串正好切完错误返回1
        if(text.isEmpty()) return 0;
        //前后遍历比较
        for(int i = 1,len = text.length();i <= len / 2;++i){
            //切片比较
            if(text.substring(0, i).equals(text.substring(len - i))){
                //递归相加
                return 2 + longestDecomposition(text.substring(i,len - i));
            }
        }
        //无法拆分
        return 1;
    }
}
posted @ 2023-04-12 10:48  wuliOVO  阅读(17)  评论(0编辑  收藏  举报