Pregunta 3 de LeetCode La subcadena más larga sin caracteres repetidos

Idea:
Ventana corredera. start y end representan el principio y el final de la ventana deslizante, respectivamente, y representan una subcadena sin caracteres repetidos. Utilice el mapa para registrar las posiciones de los personajes que se han visitado. La forma de deslizarse es que el final se acerca gradualmente al final. Y mantener el valor de inicio en el proceso. Actualizar el inicio cuando el final accede a un carácter repetido. Tenga en cuenta que tanto el inicio como el final solo pueden volverse más grandes, no más pequeños.

Desde otra perspectiva, de hecho, la ventana deslizante representa la subcadena más larga y más larga que termina en final.

class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s == null) {
            return 0;
        }
        int start = 0,end = 0,ans = 0;
        HashMap<Character,Integer> map = new HashMap<>();
        for(;end < s.length(); end++) {
            if(map.containsKey(s.charAt(end))) {
                start = Math.max(map.get(s.charAt(end)) + 1,start);
            }
            map.put(s.charAt(end),end);
            ans = Math.max(ans,end - start + 1);
        }
        return ans;
    }
}

Supongo que te gusta

Origin blog.csdn.net/vxzhg/article/details/104263895
Recomendado
Clasificación