Algoritmo: la cadena más larga sin caracteres repetidos 3. La subcadena más larga sin caracteres repetidos

3. Subcadena más larga sin caracteres repetidos

Dada una cadena s, encuentre la longitud de la
subcadena más larga
sin repetir caracteres.

Ejemplo 1:

Input: s = "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.

Ejemplo 2:

Input: s = "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.

Ejemplo 3:

Input: s = "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3.
Notice that the answer must be a substring, "pwke" is a subsequence and not a substring.

Restricciones:

  • 0 <= s.longitud <= 5 * 104
  • s consta de letras, dígitos, símbolos y espacios en inglés.

1. El mapa de doble puntero registra la posición de la primera letra +1

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        n = len(s)  # 获取字符串s的长度
        res = 0  # 初始化最长子串的长度为0
        mp = {
    
    }  # 创建一个字典mp用于存储字符和其最后出现的位置的映射
        l = 0  # 初始化左指针l为0,表示滑动窗口的左边界

        for r in range(n):  # 遍历字符串s,r为滑动窗口的右边界
            if s[r] in mp:  # 如果字符s[r]已经在字典mp中存在,说明它在滑动窗口中出现过
                l = max(l, mp[s[r]])  # 将左指针l更新为s[r]的最后出现位置的下一个位置,确保滑动窗口不包含重复字符

            res = max(res, r - l + 1)  # 更新最长子串的长度为当前滑动窗口的长度(r - l + 1)和之前的最大值之间的较大值
            mp[s[r]] = r + 1  # 将字符s[r]和其当前位置r+1添加到字典mp中,表示字符s[r]出现在位置r+1

        return res  # 返回最长子串的长度

2. Implementación de contador de contador

from collections import Counter

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        counter = Counter()  # Create a Counter to count character occurrences
        left = right = 0  # Initialize two pointers for the sliding window approach
        res = 0  # Initialize the variable to store the result (length of the longest substring)
        
        while right < len(s):  # Iterate over the characters in the input string
            r = s[right]  # Get the character at the 'right' pointer
            
            counter[r] += 1  # Increment the count of the character in the Counter
            
            while counter[r] > 1:  # If the count of the character is greater than 1 (duplicate found)
                l = s[left]  # Get the character at the 'left' pointer
                counter[l] -= 1  # Decrement the count of the character in the Counter
                left += 1  # Move the 'left' pointer to the right to remove the duplicate character
            
            res = max(res, right - left + 1)  # Update the result with the length of the current substring
            right += 1  # Move the 'right' pointer to the right to expand the window
            
        return res  # Return the length of the longest substring without repeating characters

3. Explique el contador

En Python, Counter es una clase en el módulo de colecciones que cuenta las ocurrencias de objetos hashable. Proporciona una forma conveniente de contar las ocurrencias de un elemento en una colección, como una lista, una tupla o una cadena.
La clase Counter crea un objeto similar a un diccionario con los elementos de la colección como claves y los valores correspondientes como el número de ocurrencias de esos elementos, expresado como un valor entero.
La siguiente es una explicación básica de la clase Counter y su uso:

  • Importe la clase Counter:
    antes de usar Counter, debe importarla desde el módulo de colecciones:
from collections import Counter
  • Creación de objetos de contador:
    puede crear objetos de contador pasando un objeto iterable como una lista, una tupla o una cadena como argumento al constructor de contador. Por ejemplo:
my_list = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
counter_obj = Counter(my_list)
print(counter_obj)
# 输出:Counter({4: 4, 3: 3, 2: 2, 1: 1})

En este ejemplo, el objeto Counter counter_obj se crea a partir de la lista my_list. Almacena el recuento de cada elemento de la lista como un par clave-valor en un objeto Counter.

  • Accediendo al conteo:
    Puede acceder al conteo de un elemento específico por clave, al igual que acceder al valor de un diccionario:
count_of_3 = counter_obj[3]
print(count_of_3)  # 输出:3

  • Métodos comunes:
    la clase Counter proporciona muchos métodos útiles, como most_common(), que devuelve los n elementos principales con la mayor cantidad de ocurrencias y sus recuentos:
my_string = "hello"
counter_string = Counter(my_string)
most_common_elements = counter_string.most_common(2)
print(most_common_elements)
# 输出:[('l', 2), ('h', 1)]

En este ejemplo, el método most_common(2) devuelve los dos elementos que aparecen con mayor frecuencia en la cadena y sus recuentos.
La clase Counter es útil cuando necesita contar el número de ocurrencias de un elemento en una colección, especialmente cuando se trata de grandes conjuntos de datos o tareas de procesamiento de texto.

Supongo que te gusta

Origin blog.csdn.net/zgpeace/article/details/131907327
Recomendado
Clasificación