LeetCode——1745. 回文串分割 IV[Palindrome Partitioning IV]——分析及代码[Java]
一、题目
给你一个字符串 s ,如果可以将它分割成三个 非空 回文子字符串,那么返回 true ,否则返回 false 。
当一个字符串正着读和反着读是一模一样的,就称其为 回文字符串 。
示例 1:
输入:s = "abcbdd"
输出:true
解释:"abcbdd" = "a" + "bcb" + "dd",三个子字符串都是回文的。
示例 2:
输入:s = "bcbddxy"
输出:false
解释:s 没办法被分割成 3 个回文子字符串。
提示:
- 3 <= s.length <= 2000
- s 只包含小写英文字母。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-partitioning-iv
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、分析及代码
1. 两端枚举
(1)思路
因为第 1 和第 3 个子字符串的一端边界固定为字符串首尾,可先求出其另一端可能的取值,再枚举尝试中间的第 2 个字符串是否构成回文子字符串,直至找到可行解或完成遍历。
(2)代码
class Solution {
public boolean checkPartitioning(String s) {
char[] c = s.toCharArray();
int len = s.length();
List<Integer> l1list = new ArrayList<>();
List<Integer> l2list = new ArrayList<>();
for (int l1 = 1; l1