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 is the same string when read from the front and the back.
Example 1
Input: s = abcbdd
Output: true
Explanation: "a" | "bcb" | "dd" are three non-empty palindromic substrings.
Example 2
Input: s = bcbddxy
Output: false
Explanation: The last piece must end with 'y', and the only palindrome that does is "y" itself. The middle piece must then end with 'x', which forces it to be "x". That leaves "bcbdd" as the first piece, which is not a palindrome, so no split works.
Example 3
Input: s = aaa
Output: true
Explanation: Cut it into "a" | "a" | "a"; each single letter is a palindrome.
Precompute pal[i][j] = is s[i..j] a palindrome. Then try every pair of cut points (i, j): the three pieces are s[0..i-1], s[i..j], s[j+1..n-1]. Return true the moment all three are palindromes.
Run checks all cases above. Submit evaluates all test cases.