LeetCode844: comparar cadenas con retroceso

1. Descripción del título

Dadas dos cadenas de S y T, cuando se ingresan en un editor de texto en blanco, determine si son iguales y devuelva el resultado. # Representa el carácter de retroceso.

Nota: Si ingresa un carácter de retroceso para texto vacío, el texto permanecerá vacío.

Ejemplo 1:

Entrada: S = "ab # c", T = "ad # c"
Salida: verdadera
Explicación: Tanto S como T se convertirán en "ac".
Ejemplo 2:

Entrada: S = "ab ##", T = "c # d #"
Salida: verdadera
Explicación: Tanto S como T se convertirán en "".
Ejemplo 3:

Entrada: S = "a ## c", T = "# a # c"
Salida: verdadera
Explicación: Tanto S como T se convertirán en "c".
Ejemplo 4:

Entrada: S = "a # c", T = "b"
Salida: falso
Explicación: S se convertirá en "c", pero T seguirá siendo "b".

rápido:

  1. 1 <= S.length <= 200
  2. 1 <= T.length <= 200
  3. SY Tsolo contienen letras minúsculas y caracteres '#'.

Dos, ideas de algoritmos

Primero determine la estructura de datos utilizada en la pregunta

Dos cadenas, ingrese, si encuentra #, elimine la anterior. Esto es como escribir un documento, escribiendo primero y eliminando al final. Puedes usar la estructura de pila

Finalmente, debe comparar si las dos cadenas son iguales, luego necesita dos pilas, una pila almacena una cadena

  1. Convertir cadena en matriz de caracteres
  2. Atraviese la matriz de caracteres, empuje la pila si no es # y póngala si es # y la pila no está vacía. Escriba dos bucles for para cargar matrices de caracteres en dos pilas
  3. Utilice el método equals de la pila para comparar el contenido de las dos pilas, lo mismo devuelve verdadero y diferentes devuelve falso

Tres, implementación de código

    public static boolean backspaceCompare(String S, String T) {
    
    

        //创建两个栈存放字符串
        Stack stack1 = new Stack();
        Stack stack2 = new Stack();

        //将字符串转换为字符数组
        char[] c1 = S.toCharArray();
        char[] c2 = T.toCharArray();

        //给栈1装入数据
        for (int i = 0;i < c1.length;i++){
    
    
            if (c1[i] != '#'){
    
    
                stack1.push(c1[i]);
            }else if (c1[i] == '#' && !stack1.isEmpty()){
    
    
                stack1.pop();
            }
        }
        //给栈2装入数据
        for (int i = 0;i < c2.length;i++){
    
    
            if (c2[i] != '#'){
    
    
                stack2.push(c2[i]);
            }else if (c2[i] == '#' && !stack2.isEmpty()){
    
    
                stack2.pop();
            }
        }

        //判断栈的内容是否相等
        if (stack1.equals(stack2)){
    
    
            return true;
        }else {
    
    
            return false;
        }

    }

Supongo que te gusta

Origin blog.csdn.net/weixin_45321793/article/details/110553927
Recomendado
Clasificación