Artigo Diretório
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