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 <= S.length <= 200
1 <= T.length <= 200
S
YT
solo 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
- Convertir cadena en matriz de caracteres
- 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
- 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;
}
}