ETH官方钱包

前往
大廳
主題

LeetCode - 1759. Count Number of Homogenous Substrings 解題心得

Not In My Back Yard | 2024-04-04 12:00:04 | 巴幣 10 | 人氣 58

題目連結(jié):


題目意譯:
給定一個字串 s,回傳 s 中「同質(zhì)」(Homogenous)子字串的數(shù)量。由於答案可能太大,先將其模 10 ^ 9 + 7 後再回傳。

一個字串如果只由一種字元組成,則其為「同質(zhì)」。

一個子字串為一字串中的一個連續(xù)字元序列。

限制:
1 ≦ s.length ≦ 10 ^ 5
s 由小寫字母組成。



範例測資:
範例 1:
輸入: s = "abbcccaa"
輸出: 13
解釋: 同質(zhì)子字串為下列:
"a"   出現(xiàn)了 3 次。
"aa"  出現(xiàn)了 1 次。
"b"   出現(xiàn)了 2 次。
"bb"  出現(xiàn)了 1 次。
"c"   出現(xiàn)了 3 次。
"cc"  出現(xiàn)了 2 次。
"ccc" 出現(xiàn)了 1 次。
3 + 1 + 2 + 1 + 3 + 2 + 1 = 13。

範例 2:
輸入: s = "xy"
輸出: 2
解釋: 同質(zhì)子字串為 "x" 和 "y"。

範例 3:
輸入: s = "zzzzz"
輸出: 15


解題思維:
因為我們只考慮「同質(zhì)」的子字串,因此我們只須掃過一次 s 並統(tǒng)計每一種連續(xù)字元的出現(xiàn)情形。

例如說對於範例 1 中的 s = "abbcccaa",我們可以將其拆解為 "a" + "bb" + "ccc" + "aa"。

假設現(xiàn)在看到的字元連續(xù)出現(xiàn)了 C 次(例如上例中的 "ccc",其中 'c' 出現(xiàn)了 3 次),若只考慮這個子字串以及其自身的子字串(即把該子字串拆得更?。?,則會有
C × (C + 1) ÷ 2
個同質(zhì)子字串。

而把所有連續(xù)字元的子字串按照上面的方式計算各自擁有同質(zhì)子字串並加總即是所求。




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

創(chuàng)作回應

追蹤 創(chuàng)作集

作者相關創(chuàng)作

更多創(chuàng)作