📜  没有连续相同字母的最长子串的长度(1)

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

没有连续相同字母的最长子串的长度

在字符串处理中,经常需要找到没有连续相同字母的最长子串的长度。例如,在字符串abccdefg中,没有连续相同字母的最长子串为abcdefg,长度为7。

以下是一个简单的算法来找到没有连续相同字母的最长子串的长度:

  1. 初始化一个计数器count为1,一个最大长度变量max_len为1,一个当前长度变量cur_len为1。
  2. 从第二个字符开始,依次处理字符串中的每个字符。若当前字符与前一个字符不相同,则cur_len加1。否则,将cur_len重置为1。
  3. 如果cur_len大于max_len,则将max_len设置为cur_len
  4. 处理完所有字符后,返回max_len

下面是Python实现:

def max_len_no_repeated_chars(s: str) -> int:
    count = 1
    max_len = 1
    cur_len = 1
    for i in range(1, len(s)):
        if s[i] != s[i-1]:
            cur_len += 1
        else:
            cur_len = 1
        if cur_len > max_len:
            max_len = cur_len
    return max_len

该算法的时间复杂度是$O(n)$,其中$n$是字符串s的长度。

下面是一些测试用例:

assert max_len_no_repeated_chars("abccdefg") == 7
assert max_len_no_repeated_chars("aabbcdefg") == 3
assert max_len_no_repeated_chars("abcabcdabcde") == 5
assert max_len_no_repeated_chars("aaaaa") == 1

以上就是一个简单的算法来找到没有连续相同字母的最长子串的长度,并提供了Python实现和一些测试用例。