Pregunta 48 de la entrevista de Leetcode. La subcadena más larga sin caracteres repetidos [Programación dinámica]

Descripción del problema

Busque la subcadena más larga sin repetir caracteres de la cadena y calcule la longitud de la subcadena más larga.

Informe de resolución de problemas.

re pags [ yo ] dp [i] significa yo yo La longitud de la subcadena más larga que termina con caracteres.
Recuerda re pags [ yo - 1 ] dp [i-1] La posición inicial es pags pags
buscar re pags [ yo ] dp [i] :

  • Transversal inversa s [ yo - 1 ] , s [ yo - 2 ] , , s [ pags ] s [i-1], s [i-2], \ cdots, s [p] ,
  • Si no existe s [ j ] = = s [ yo ] s [j] == s [i] , entonces re pags [ yo ] = re pags [ yo - 1 ] + 1 dp [i] = dp [i-1] +1 pags pags permanece sin cambios;
  • Si existe s [ j ] = = s [ yo ] s [j] == s [i] , entonces re pags [ yo ] = yo - j dp [i] = ij , mientras tanto pags pags actualiza a j j

Complejidad del tiempo: es mejor El ( norte ) O (N) , lo peor es El ( norte 2 ) O (N ^ 2)
Complejidad espacial: El ( norte ) O (N)

Código de implementación

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int n=s.size(),ans=1,flag=0,i,j,p=0;
        if(n==0) return 0;
        vector<int>dp(n,1);
        for(i=1;i<n;i++){
            for(j=i-1;j>=p;j--){
                if(s[i]==s[j]){
                    flag=1;
                    break;
                }
            }
            if(!flag)
                dp[i]=dp[i-1]+1;
            else{
                dp[i]=i-j;
                p=j;
                flag=0;
            }
            ans=max(ans,dp[i]);
        }
        return ans;
    }
};

Referencias

[1] Pregunta 48 de la entrevista de Leetcode. La subcadena más larga sin caracteres repetidos

Publicado 139 artículos originales · elogiado 8 · 10,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/qq_27690765/article/details/105439787
Recomendado
Clasificación