前往
大廳
主題

LeetCode - 1930. Unique Length-3 Palindromic Subsequences 解題心得

Not In My Back Yard | 2021-11-18 00:00:08 | 巴幣 0 | 人氣 176

題目連結:


題目意譯:
給定一字串 s,回傳長度為 3 的相異迴文其為 s 的一個子序列之數量。

請注意即使有多種方式可以得到同一個子序列,其仍只會被納入計數一次。

一個迴文為正著讀與反著讀都相同的一個字串。

一個字串的一個子序列為一個新字串藉由刪除原始字串若干個(可能沒有)字元且不更動剩餘字元的相對順序而產生。

例如,"ace" 為 "abcde" 的一個子序列。

限制:
3 ≦ s.length ≦ 10 ^ 5
s 只由小寫英文字母組成。



範例測資:
範例 1:
輸入: s = "aabca"
輸出: 3
解釋: 3 個長度為 3 的迴文子序列為:
- "aba" ("aabca" 之子序列)
- "aaa" ("aabca" 之子序列)
- "aca" ("aabca" 之子序列)

範例 2:
輸入: s = "adc"
輸出: 0
解釋: "abc" 中沒有長度為 3 的迴文子序列。

範例 3:
輸入: s = "bbcbaba"
輸出: 4
解釋: 4 個長度為 3 的迴文子序列為:
- "bbb" ("bbcbaba" 之子序列)
- "bcb" ("bbcbaba" 之子序列)
- "bab" ("bbcbaba" 之子序列)
- "aba" ("bbcbaba" 之子序列)


解題思維:
窮舉所有可能的長度為 3 之迴文字串:
"aaa"、
"aba"、
……
"aza"、
"bab"、
……
然後判斷裡面有幾種是 s 的子序列,該數量即為所求。

而單一一次的判斷是不是子序列的時間複雜度需要從直觀的 O(s.length) 降低至 O(log(s.length)),作法可以參見這題的心得後半提及的內容。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作