LeetCode: la subcadena más larga sin caracteres repetidos (js + estructura de datos establecida)

tema

Dada una cadena, averigüe la longitud de la subcadena más larga que no contiene caracteres repetidos.

Ejemplo

Entrada: "abcabcbb"
Salida: 3
Explicación: Debido a que la subcadena más larga sin caracteres repetidos es "abc", su longitud es 3.
Entrada: "bbbbb"
Salida: 1
Explicación: Debido a que la subcadena más larga sin caracteres repetidos es "b", su longitud es 1.
Entrada: "pwwkew"
Salida: 3
Explicación: Debido a que la subcadena más larga sin caracteres repetidos es "wke", su longitud es 3.
Tenga en cuenta que su respuesta debe tener la longitud de la subcadena, "pwke" es una subsecuencia, no una subcadena.

Ideas

  1. Crea un conjunto
  2. Dos punteros (no se asuste por este término) El primero apunta al comienzo de la cadena j, el segundo atraviesa la cadena i con el bucle for
  3. Si no hay s [i] en el conjunto, significa que no hay caracteres repetidos hasta ahora. Agregue s [i] al conjunto y luego actualice el número máximo de caracteres únicos.
  4. Si hay s [i] en el conjunto, elimine s [j] del conjunto e incremente j, luego verifique si hay s [i] en el conjunto y repita hasta que no haya s [i] en el conjunto.
  5. Repita los pasos 3 y 4 hasta atravesar toda la cuerda.
const lengthOfLongestSubstring = s => {
    
    
  // 定义两个循环变量和要输出的最大长度的变量
  let i = 0 ,j = 0, maxLength = 0
  const set = new Set()
  //判断数组的长度为0的时候直接返回0
  s.length === 0 && 0 
  
  for(i; i < s.length; i++) {
    
    

    if (!set.has(s[i])) {
    
    
      set.add(s[i])
      maxLength = Math.max(maxLength,set.size)
    }else {
    
    
      while (set.has(s[i])) {
    
    
        set.delete(s[j])  
        j++
      }
      set.add(s[i])
    }
  }
  return maxmaxLength
};

Supongo que te gusta

Origin blog.csdn.net/pz1021/article/details/105821543
Recomendado
Clasificación