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 y T solo contienen letras minúsculas y el carácter '#'.
Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/backspace-string-compare
Hice esta pregunta por accidente después de leer la idea de un maestro ascendente en la estación b. Di los dos nombres estadísticos sspace y tspace, y los comparé de atrás hacia adelante. Cuando se encuentra el número #, aumentará en 1, y viceversa. Reste 1 y cuando ambos sean 0, compare los bits correspondientes de las dos cadenas y devuelva falso si son diferentes.
el código se muestra a continuación:
/**
* @param {string} S
* @param {string} T
* @return {boolean}
*/
var backspaceCompare = function(S, T) {
var i=S.length-1;
var j=T.length-1;;
var sspace=0;
var tspace=0;
while(i>=0||j>=0){
while(i>=0){
if(S[i]=='#'){
sspace++;
i--;
}else if(sspace>0){
sspace--;
i--;
}else{
break;
}
}
while(j>=0){
if(T[j]=='#'){
tspace++;
j--;
}else if(tspace>0){
tspace--;
j--;
}else{
break;
}
}
if(S[i]!==T[j]){
return false;
}
if(i<0&&j>=0||i>=0&&j<0){
return false;
}
i--;
j--;
}
return true;
};
Después de leer las soluciones de otros, creo que es más fácil usar expresiones regulares. Por ejemplo, el código de este anciano, para su referencia:
/**
* @param {string} S
* @param {string} T
* @return {boolean}
*/
var backspaceCompare = function(S, T) {
let reg = /[a-z](?=\#)\#/g;
S = S.replace(/^\#/,'').replace(reg, '');
T = T.replace(/^\#/,'').replace(reg, '');
if(!S.includes('#') && !T.includes('#')){
return S == T;
}
return backspaceCompare(S, T);
};
作者:caoyq0521
链接:https://leetcode-cn.com/problems/backspace-string-compare/solution/bi-jiao-han-tui-ge-de-zi-fu-chuan-by-caoyq0521/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。