📅  最后修改于: 2023-12-03 15:27:34.633000             🧑  作者: Mango
在二进制字符串中,如果一个子字符串中的所有数字都相同,则称该子字符串为连续子串。交替子字符串是由连续的 0 和 1 组成的字符串,其中 0 和 1 交替出现。给定一个只包含「0」和「1」的字符串 s,请计算出 s 中交替子字符串的数量。
从左到右扫描字符串,如果遇到两个相邻的数字不同,则当前位置可以作为一个新的子字符串的起始位置,将其存储下来。最后统计子字符串的数量即可。
def count_alternating_substrings(s: str) -> int:
if not s:
return 0
count = 1
start = 0
for i in range(1, len(s)):
if s[i] != s[start]:
count += 1
start = i
return count
该算法只需要一次遍历,时间复杂度为 $O(n)$,只需要常数级别的空间,空间复杂度为 $O(1)$。
本题利用了连续子串的概念,可以更好地理解交替子字符串的性质。本题还有一个优化,即将字符串转化为字符数组进行遍历,可以获得更好的性能。