1930. Unique Length-3 Palindromic Subsequences
Description
Given a string s
, return the number of unique palindromes of length three that are a subsequence of s
.
Note that even if there are multiple ways to obtain the same subsequence, it is still only counted once.
A palindrome is a string that reads the same forwards and backwards.
A subsequence of a string is a new string generated from the original string with some characters (can be none) deleted without changing the relative order of the remaining characters.
- For example,
"ace"
is a subsequence of"abcde"
.
Example 1:
Input: s = "aabca" Output: 3 Explanation: The 3 palindromic subsequences of length 3 are: - "aba" (subsequence of "aabca") - "aaa" (subsequence of "aabca") - "aca" (subsequence of "aabca")
Example 2:
Input: s = "adc" Output: 0 Explanation: There are no palindromic subsequences of length 3 in "adc".
Example 3:
Input: s = "bbcbaba" Output: 4 Explanation: The 4 palindromic subsequences of length 3 are: - "bbb" (subsequence of "bbcbaba") - "bcb" (subsequence of "bbcbaba") - "bab" (subsequence of "bbcbaba") - "aba" (subsequence of "bbcbaba")
Constraints:
3 <= s.length <= 105
s
consists of only lowercase English letters.
Solutions
Solution 1: Enumerate Both End Characters + Hash Table
Since the string contains only lowercase letters, we can directly enumerate all pairs of end characters. For each pair of end characters \(c\), we find their first and last occurrence positions \(l\) and \(r\) in the string. If \(r - l > 1\), it means we have found a palindromic subsequence that meets the conditions. We then count the number of unique characters between \([l+1,..r-1]\), which gives the number of palindromic subsequences with \(c\) as the end characters, and add it to the answer.
After enumerating all pairs, we get the answer.
The time complexity is \(O(n \times |\Sigma|)\), where \(n\) is the length of the string and \(\Sigma\) is the size of the character set. In this problem, \(|\Sigma| = 26\). The space complexity is \(O(|\Sigma|)\) or \(O(1)\).
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|