前往
大廳
主題

LeetCode - 1781. Sum of Beauty of All Substrings 解題心得

Not In My Back Yard | 2024-04-15 12:00:18 | 巴幣 0 | 人氣 26

題目連結:


題目意譯:
一個字串的美麗度為最常出現的字元與最不常出現的字元兩者之間的出現頻率之差值。

例如說,"abaacc" 的美麗度為 3 - 1 = 2。

給定一個字串 s,回傳其所有子字串的美麗度之總和。

限制:
1 ≦ s.length ≦ 500
s 只由小寫英文字母組成。



範例測資:
範例 1:
輸入: s = "aabcb"
輸出: 5
解釋: 有非零美麗度的子字串為 ["aab","aabc","aabcb","abcb","bcb"],其中每個字串的美麗度為 1。

範例 2:
輸入: s = "aabcbaa"
輸出: 17


解題思維:
由於 s 的長度最大只有 500 個字元,因此直接窮舉出所有子字串並計算美麗度即可。

不過當然不是每遇到一個子字串就「全部」重新統計字元的出現次數再計算美麗度,同一個「開頭」(或同一個「結尾」)的子字串實際上可以「幾乎合在一起」。

例如說從 s[1] 開頭的話,我們會有
    s[1] ~ s[1]
    s[1] ~ s[2]
    s[1] ~ s[3]
    ……
每一個新的(即較後面的)子字串將會包含前面的子字串,因此直接沿用前面的統計結果即可。因此總體時間複雜度為 O(字元種類 × 子字串數量) = O(26 × 500 ^ 2)。




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

創作回應

更多創作