Leetcode una pregunta diaria [830. Ubicación del grupo más grande]

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

Supongo que te gusta

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