Leetcode uma pergunta diária [830. Localização do grupo maior]

1. Descrição do título

Em uma string composta de letras minúsculas, ela contém um grupo de caracteres idênticos consecutivos.

Por exemplo, na string s = "abbxxxxzyy", existem alguns grupos como "a", "bb", "xxxx", "z" e "yy".

O agrupamento pode ser representado pelo intervalo [início, fim], onde início e fim representam respectivamente os subscritos das posições inicial e final do grupo. O agrupamento “xxxx” no exemplo acima é representado pelo intervalo [3,6].

Chamamos todos os grupos que contêm mais do que ou igual a três caracteres consecutivos como grupos maiores.

Encontre cada intervalo de agrupamento maior, classifique pelo índice da posição inicial em ordem crescente e retorne o resultado.

Exemplo 1:

Entrada: s = "abbxxxxzzy"
Saída: [[3,6]]
Explicação: "xxxx" é um grupo maior começando em 3 e terminando em 6.

Exemplo 2:

Entrada: s = "abc"
Saída: []
Explicação: "a", "b" e "c" não são grupos grandes que atendem aos requisitos.

Exemplo 3:

Entrada: s = "abcdddeeeeaabbbcd"
Saída: [[3,5], [6,9], [12,14]]
Explicação: Os grupos maiores são "ddd", "eeee" e "bbb"

Exemplo 4:

Entrada: s = "aba"
Saída: []

pronto:

1 <= s.length <= 1000
s 仅含小写英文字母

Fonte: LeetCode (LeetCode)
Link: https://leetcode-cn.com/problems/positions-of-large-groups Os
direitos autorais são propriedade da LeetCode . Para reimpressões comerciais, favor contatar a autorização oficial Para reimpressões não comerciais, favor indicar a fonte

Dois, ideias e código

1. Um ciclo

Percorra cada elemento da lista, se o seguinte elemento for igual ao elemento anterior, conte +1, caso contrário, se a lista de loops até o final e o elemento atual não for igual ao próximo elemento, julgue se a contagem> = 3, adicione se a condição for atendida Lista.

def largeGroupPositions(s):
        res = []
        if len(s) < 3:
            return res
        num = 0
        for i in range(len(s)):
            if i == len(s) - 1 or s[i] != s[i + 1]: #到达尾部或者与下一个值不同,判断长度
                if num >= 2:
                    res.append([i - num , i])
                num = 0
            else:
                num += 1
        return res


res =largeGroupPositions("abbxxxxzzy")

print(res)

2. Outras idéias (veja a solução para aprender)

Use expressões regulares

class Solution:
    def largeGroupPositions(self, s: str) -> List[List[int]]:
        res,idx=[],0
        for i,j in re.findall(r'([a-z])(\1*)',s):
            if len(j)>=2:
                res.append([idx,idx+len(j)])
            idx += 1+len(j)
        return res

Acho que você gosta

Origin blog.csdn.net/qq_49821869/article/details/112255394
Recomendado
Clasificación