leetcode 算法题844 (简单220) 比较含退格的字符串
- 题目介绍
给定 S 和 T 两个字符串,
当它们分别被输入到空白的文本编辑器后,
判断二者是否相等,并返回结果。
# 代表退格字符。
- 示例
输入:S = “ab#c”, T = “ad#c”
输出:true
解释:S 和 T 都会变成 “ac”。
输入:S = “ab##”, T = “c#d#”
输出:true
解释:S 和 T 都会变成 “”。
输入:S = “a##c”, T = “#a#c”
输出:true
解释:S 和 T 都会变成 “c”。
输入:S = “a#c”, T = “b”
输出:false
解释:S 会变成 “c”,但 T 仍然是 “b”。
- 解法一
/**
* @param {string} S
* @param {string} T
* @return {boolean}
*/
var backspaceCompare = function(S, T) {
return getStr(S) === getStr(T);
};
const getStr = str => {
let i = str.length, count = 0, s = '';
while(i >= 0) {
if(str[i] === '#') {
count++;
} else {
if(count) {
count--;
} else {
s = str[i] + s;
}
}
i--;
}
return s;
}
执行用时 : 76 ms, 在所有 JavaScript 提交中击败了83.33%的用户
内存消耗 : 35.1 MB, 在所有 JavaScript 提交中击败了36.76%的用户
- 解法二
/**
* @param {string} S
* @param {string} T
* @return {boolean}
*/
var backspaceCompare = function(S, T) {
let i = S.length, j = T.length;
while(i >= 0 && j >= 0) {
i = getNextIndex(S, i);
j = getNextIndex(T, j);
if(S[i] !== T[j]) {
return false;
}
}
return true;
};
const getNextIndex = (str, i) => {
if(str[--i] !== '#') {
return i;
}
i--;
let count = 1;
while(i >= 0) {
if(str[i] === '#') {
count++;
} else {
count--;
}
if(count === -1) {
return i;
}
i--;
}
return i;
}
执行用时 : 68 ms, 在所有 JavaScript 提交中击败了96.30%的用户
内存消耗 : 34.4 MB, 在所有 JavaScript 提交中击败了88.24%的用户