2002. Maximum Product of the Length of Two Palindromic Subsequences
Description
Given a string s
, find two disjoint palindromic subsequences of s
such that the product of their lengths is maximized. The two subsequences are disjoint if they do not both pick a character at the same index.
Return the maximum possible product of the lengths of the two palindromic subsequences.
A subsequence is a string that can be derived from another string by deleting some or no characters without changing the order of the remaining characters. A string is palindromic if it reads the same forward and backward.
Example 1:
Input: s = "leetcodecom" Output: 9 Explanation: An optimal solution is to choose "ete" for the 1st subsequence and "cdc" for the 2nd subsequence. The product of their lengths is: 3 * 3 = 9.
Example 2:
Input: s = "bb" Output: 1 Explanation: An optimal solution is to choose "b" (the first character) for the 1st subsequence and "b" (the second character) for the 2nd subsequence. The product of their lengths is: 1 * 1 = 1.
Example 3:
Input: s = "accbcaxxcxx" Output: 25 Explanation: An optimal solution is to choose "accca" for the 1st subsequence and "xxcxx" for the 2nd subsequence. The product of their lengths is: 5 * 5 = 25.
Constraints:
2 <= s.length <= 12
s
consists of lowercase English letters only.
Solutions
Solution 1: Binary Enumeration
We notice that the length of the string \(s\) does not exceed \(12\), so we can use the method of binary enumeration to enumerate all subsequences of \(s\). Suppose the length of \(s\) is \(n\), we can use \(2^n\) binary numbers of length \(n\) to represent all subsequences of \(s\). For each binary number, the \(i\)-th bit being \(1\) means the \(i\)-th character of \(s\) is in the subsequence, and \(0\) means it is not in the subsequence. For each binary number, we judge whether it is a palindrome subsequence and record it in the array \(p\).
Next, we enumerate each number \(i\) in \(p\). If \(i\) is a palindrome subsequence, then we can enumerate a number \(j\) from the complement of \(i\), \(mx = (2^n - 1) \oplus i\). If \(j\) is also a palindrome subsequence, then \(i\) and \(j\) are the two palindrome subsequences we are looking for. Their lengths are the number of \(1\)s in the binary representation of \(i\) and \(j\), denoted as \(a\) and \(b\), respectively. Then their product is \(a \times b\). We take the maximum of all possible \(a \times b\).
The time complexity is \((2^n \times n + 3^n)\), and the space complexity is \(O(2^n)\). Here, \(n\) is the length of the string \(s\).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|