1. 程式人生 > 其它 >LeetCode 1759. 統計同構子字串的數目

LeetCode 1759. 統計同構子字串的數目

技術標籤:LeetCode

文章目錄

1. 題目

給你一個字串 s ,返回 s 中 同構子字串 的數目。
由於答案可能很大,只需返回對 10^9 + 7 取餘 後的結果。

同構字串 的定義為:如果一個字串中的所有字元都相同,那麼該字串就是同構字串。

子字串 是字串中的一個連續字元序列。

示例 1:
輸入:s = "abbcccaa"
輸出:13
解釋:同構子字串如下所列:
"a"   出現 3 次。
"aa"  出現 1 次。
"b"   出現 2 次。
"bb"
出現 1 次。 "c" 出現 3 次。 "cc" 出現 2 次。 "ccc" 出現 1 次。 3 + 1 + 2 + 1 + 3 + 2 + 1 = 13 示例 2: 輸入:s = "xy" 輸出:2 解釋:同構子字串是 "x""y" 。 示例 3: 輸入:s = "zzzzz" 輸出:15 提示: 1 <= s.length <= 10^5 s 由小寫字串組成

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/count-number-of-homogenous-substrings


著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

2. 解題

  • 記錄連續一樣的字元的個數 n,這段內的同構子字串個數是 n ∗ ( n + 1 ) / 2 n*(n+1)/2 n(n+1)/2
class Solution {
public:
    int countHomogenous(string s) {
        int ans = 0, n = 0, num = 0, mod = 1e9+7;
        char prev = s[0];
        for(int i = 0; i < s.size(); ++i)
        {
            if
(s[i] == prev) { n++; } else if(s[i] != prev) { prev = s[i]; num = (1LL*(1+n)*n/2)%mod; n = 1; ans = (ans + num)%mod; } } num = (1LL*(1+n)*n/2)%mod; ans = (ans + num)%mod; return ans; } };

24 ms 11.4 MB C++


我的CSDN部落格地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
Michael阿明