1819. 最长双交替子串(回顾)

1819. 最长双交替子串

中文English

给定一个长度为NN且只包含ab的字符串SS。你需要找出最长的子串长度,使得其中不包含三个连续的字母。即,找出不包含aaabbb的最长子串长度。注意SS是其本身的子串。

样例

样例1

输入: "baaabbabbb"
输出: 7
说明: "aabbabb"是最长符合条件的子串

样例2

输入: "babba"
输出: 5
说明:整个S符合条件

样例3

输入: "abaaaa"
输出: 4
说明: "abaa"是最长符合条件的子串

注意事项

  • NN 的取值范围是[1,200\,000][1,200000];
  • 字符串SS只包含字符 a 和/或 b.
class Solution:
    """
    @param s: the string
    @return: length of longest semi alternating substring
    """
    '''
    大致思路:
    1.初始化c=0,res=[],循环,如果是a的话,开始计数,初始化p,拼接,一直到c>=3的时候,此时截取字符串,append到res里面,p重置,最后返回最长即可。
    '''
    def longestSemiAlternatingSubstring(self, s):
        if s == '':
            return 0
        c = 1
        res = []
        s = s + ' '
        p = s[0]
        for i in range(1,len(s)):
            if s[i] != s[i-1]:
                if c >= 3:
                    j = c - 2
                    res.append(len(p[:-j]))       
                    p = s[i-1]*2
                elif s[i] == ' ':
                    res.append(len(p))
                c = 1  
            else:
                c += 1 
            p += s[i]
        return max(res)

 

posted @ 2020-05-03 13:21  风不再来  阅读(424)  评论(0编辑  收藏  举报