📌  相关文章
📜  给定二进制字符串中所有字符相同的子字符串的计数(1)

📅  最后修改于: 2023-12-03 15:41:16.441000             🧑  作者: Mango

给定二进制字符串中所有字符相同的子字符串的计数

问题描述

给定一个仅包含0和1的二进制字符串,计算其中所有字符都相同的子字符串的数量。

例如,字符串 "00001111" 中有四个只包含0的子字符串:"0000"、"00"、""和"000000"。同样地,有三个只包含1的子字符串:"1111"、"11"和"111111"。因此,该字符串中所有字符相同的子字符串的数量为7。

解决方法

定义一个变量 count,表示所有字符相同子字符串的数量。然后从第二个字符开始遍历字符串,如果当前字符和前一个字符相同,就把 temp 增加1。如果不同,就计算 temp 表示的子字符串数量,然后将 count 增加这个数量。遍历完成后还要计算一下最后一段子字符串的数量。

具体实现请看以下代码:

class Solution {
    public int countBinarySubstrings(String s) {
        int count = 0, preLen = 0, curLen = 1;
        for (int i = 1; i < s.length(); i++) {
            if (s.charAt(i) == s.charAt(i - 1)) {
                curLen++;
            } else {
                preLen = curLen;
                curLen = 1;
            }
            if (preLen >= curLen) {
                count++;
            }
        }
        return count;
    }
}
复杂度分析
  • 时间复杂度:O(n),其中n是字符串的长度。遍历一遍字符串即可计算出所有字符相同子串的数量。
  • 空间复杂度:O(1)。没有使用额外的数据结构。