LeetCode 獨特字串

2021-09-23 14:29:53 字數 1412 閱讀 3820

如果乙個字元在字串 s 中有且僅有出現一次,那麼我們稱其為獨特字元。

例如,在字串 s = 「letter」 中,「l」 和 「r」 可以被稱為獨特字元。

我們再定義 uniq(s) 作為字串 s 中獨特字元的個數。

那麼,在 s = 「letter」 中, uniq(「letter」) = 2。

對於給定字串 s,計算其所有非空子串的獨特字元的個數(即 uniq(substring))之和。

如果在 s 的不同位置上出現兩個甚至多個相同的子串,那麼我們認為這些子串是不同的。

考慮到答案可能會非常大,規定返回格式為:結果 mod 10 ^ 9 + 7。

示例 1:

輸入: "abc"

輸出: 10

解釋: 所有可能的子串為:"a","b","c","ab","bc" 和 "abc"。

其中,每乙個子串都由獨特字元構成。

所以其長度總和為:1 + 1 + 1 + 2 + 2 + 3 = 10

示例 2:

輸入: "aba"

輸出: 8

解釋: 除了子串 uniq('aba') = 1,其餘與示例1相同。

說明: 0 <= s.length <= 10000。

思 路分

析:\color思路分析:

思路分析

:對每乙個字元s[center],向前找到相同的字元s[before],向後找到相同的字元s[after]。當前字元對最終結果的貢獻是:(center - before)* (after - center)。

這相當於兩種方案的拼接:

在字串a(before ~ center)當中,字元s[center]貢獻的次數是(center - before)次。

在字串b(center ~ after)當中,字元s[center]貢獻的次數是 (after - center)。

那麼當兩者拼接的時候,字元 s[center] 對子串(before ~ after)的貢獻就是兩種方案的乘積。

class

solution

while

(after < strsize && s[after]

!= s[center]

) sum +

=(center - before)

*(after - center)

;//s[center] 對子串(before ~ after)的貢獻就是兩種方案的乘積

LeetCode 字串 反轉字串

反轉字串 編寫乙個函式,其作用是將輸入的字串反轉過來。輸入字串以字元陣列char的形式給出。不要給另外的陣列分配額外的空間,你必須原地修改輸入陣列 使用 o 1 的額外空間解決這一問題。你可以假設陣列中的所有字元都是 ascii 碼表中的可列印字元。示例 1 輸入 h e l l o 輸出 o l ...

LeetCode 字串 親密字串

給定兩個由小寫字母構成的字串 a 和 b 只要我們可以通過交換 a 中的兩個字母得到與 b 相等的結果,就返回 true 否則返回 false 示例 輸入 a ab b ba 輸出 true 輸入 a ab b ab 輸出 false 輸入 a aa b aa 輸出 true 遍歷字串 a,記錄 a...

LeetCode 字串 重構字串

給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。若可行,輸出任意可行的結果。若不可行,返回空字串。示例 輸入 s aab 輸出 aba 輸入 s aaab 輸出 說明 假設 s 中有多個 a,則我們想讓字串排成 axaxax 的形式。我們可以先統計每個字元出現的次數,然後利用間隔...