g1701_1800.s1745_palindrome_partitioning_iv.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g1701_1800.s1745_palindrome_partitioning_iv;
// #Hard #String #Dynamic_Programming #2022_04_29_Time_10_ms_(100.00%)_Space_44_MB_(95.27%)
/**
* 1745 - Palindrome Partitioning IV\.
*
* Hard
*
* Given a string `s`, return `true` _if it is possible to split the string_ `s` _into three **non-empty** palindromic substrings. Otherwise, return_ `false`.
*
* A string is said to be palindrome if it the same string when reversed.
*
* **Example 1:**
*
* **Input:** s = "abcbdd"
*
* **Output:** true
*
* **Explanation:** "abcbdd" = "a" + "bcb" + "dd", and all three substrings are palindromes.
*
* **Example 2:**
*
* **Input:** s = "bcbddxy"
*
* **Output:** false
*
* **Explanation:** s cannot be split into 3 palindromes.
*
* **Constraints:**
*
* * `3 <= s.length <= 2000`
* * `s` consists only of lowercase English letters.
**/
public class Solution {
public boolean checkPartitioning(String s) {
final int len = s.length();
char[] ch = s.toCharArray();
int[] dp = new int[len + 1];
dp[0] = 0x01;
for (int i = 0; i < len; i++) {
for (int l : new int[] {i - 1, i}) {
int r = i;
while (l >= 0 && r < len && ch[l] == ch[r]) {
dp[r + 1] |= dp[l] << 1;
l--;
r++;
}
}
}
return (dp[len] & 0x08) == 0x08;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy