列表

详情


1180. 统计只含单一字母的子串

给你一个字符串 s,返回 只含 单一字母 的子串个数

示例 1:

输入: s = "aaaba"
输出: 8
解释: 只含单一字母的子串分别是 "aaa", "aa", "a", "b"。
"aaa" 出现 1 次。
"aa" 出现 2 次。
"a" 出现 4 次。
"b" 出现 1 次。
所以答案是 1 + 2 + 4 + 1 = 8。

示例 2:

输入: s = "aaaaaaaaaa"
输出: 55

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int countLetters(string s) { } };

python3 解法, 执行用时: 40 ms, 内存消耗: 16 MB, 提交时间: 2023-10-15 18:24:16

class Solution:
    def countLetters(self, s: str) -> int:
        res = 0
        n = len(s)
        i = 0
        while i < n:
            cur = 1
            res += cur
            while i + 1 < n and s[i] == s[i+1]:
                cur += 1
                res += cur
                i += 1
            i += 1
        return res

java 解法, 执行用时: 1 ms, 内存消耗: 39.4 MB, 提交时间: 2023-10-15 18:24:01

class Solution {
    public int countLetters(String s) {
        int ans = 0;
        int count = 1;
        for (int i = 1; i < s.length(); i++) {
            if (s.charAt(i) == s.charAt(i - 1)) {
                count++;
            } else {
                ans += count * (count + 1) / 2;
                count = 1;
            }
        }
        ans += count * (count + 1) / 2;
        return ans;
    }
}

golang 解法, 执行用时: 0 ms, 内存消耗: 1.8 MB, 提交时间: 2023-10-15 18:23:46

func countLetters(s string) int {
    var pre byte
    ans, count := 0, 0
    for i := 0; i < len(s); i++ {
        if  s[i] != pre {
            ans += count * (count + 1) / 2
            count = 1
            pre = s[i]
        } else {
            count++
        }
    }
    ans += count * (count + 1) / 2
    return ans
}

上一题