Directorio de artículos
1. Descripción del título
En una cadena compuesta de letras minúsculas, contiene un grupo de caracteres idénticos consecutivos.
Por ejemplo, en la cadena s = "abbxxxxzyy", hay algunos grupos como "a", "bb", "xxxx", "z" e "yy".
La agrupación se puede representar mediante el intervalo [inicio, fin], donde inicio y final representan respectivamente los subíndices de las posiciones inicial y final del grupo. La agrupación “xxxx” en el ejemplo anterior está representada por el intervalo [3,6].
Llamamos a todos los grupos que contienen más o igual a tres caracteres consecutivos como grupos más grandes.
Encuentre cada intervalo de agrupación más grande, ordene por el índice de posición inicial en orden ascendente y devuelva el resultado.
Ejemplo 1:
Entrada: s = "abbxxxxzzy"
Salida: [[3,6]]
Explicación: "xxxx" es un grupo más grande que comienza en 3 y termina en 6.
Ejemplo 2:
Entrada: s = "abc"
Salida: []
Explicación: "a", "b" y "c" no son grupos grandes que cumplen con los requisitos.
Ejemplo 3:
Entrada: s = "abcdddeeeeaabbbcd"
Salida: [[3,5], [6,9], [12,14]]
Explicación: Los grupos más grandes son "ddd", "eeee" y "bbb"
Ejemplo 4:
Entrada: s = "aba"
Salida: []
rápido:
1 <= s.length <= 1000
s 仅含小写英文字母
Fuente: LeetCode (LeetCode)
Enlace: https://leetcode-cn.com/problems/positions-of-large-groups Los
derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.
Dos, ideas y código
1. Un ciclo
Recorra cada elemento de la lista, si el siguiente elemento es igual al elemento anterior, cuente +1; de lo contrario, si la lista de bucles hasta el final y el elemento actual no es igual al siguiente elemento, juzgue si el recuento> = 3, agregue si se cumple la condición List.
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. Otras ideas (consulte la solución para aprender)
Usa expresiones 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