Categorías
Algorithms

LeetCode – Comparación de cadenas de retroceso (Java)

Dadas dos cadenas S y T, devuelva si son iguales cuando ambas se escriben en editores de texto vacíos. # significa un carácter de retroceso.

Ejemplo 1:

Input: S = "ab#c", T = "ad#c"
Output: true
Explanation: Both S and T become "ac".

Ejemplo 2:

Input: S = "a##c", T = "#a#c"
Output: true
Explanation: Both S and T become "c".

Solución Java

Este problema requiere tiempo O (N) y espacio O (1).

public boolean backspaceCompare(String S, String T) {
    int i = S.length()-1;
    int j = T.length()-1;
 
    while(i>=0 || j>=0){
        int c1=0;
        while(i>=0 && (c1>0 || S.charAt(i)=='#')){
            if(S.charAt(i)=='#'){
                c1++;
            }else{
                c1--;
            }
 
            i--;
        }
 
        int c2=0;
        while(j>=0 && (c2>0 || T.charAt(j)=='#')){
            if(T.charAt(j)=='#'){
                c2++;
            }else{
                c2--;
            }
 
            j--;
        }
 
        if(i>=0 && j>=0){
            if(S.charAt(i)!=T.charAt(j)){
                return false;
            }else{
                i--;
                j--;
            }
        }else{
            if(i>=0 || j>=0){
                return false;
            }
        }
    }
 
    return i<0 && j<0;
}

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *