diff --git a/problems/0844.比较含退格的字符串.md b/problems/0844.比较含退格的字符串.md index 74455ace..a3199ebe 100644 --- a/problems/0844.比较含退格的字符串.md +++ b/problems/0844.比较含退格的字符串.md @@ -232,6 +232,64 @@ func backspaceCompare(s string, t string) bool { ``` JavaScript: +```javascript +// 双栈 +var backspaceCompare = function(s, t) { + const arrS = [], arrT = []; // 数组作为栈使用 + for(let char of s){ + char === '#' ? arrS.pop() : arrS.push(char); + } + for(let char of t){ + char === '#' ? arrT.pop() : arrT.push(char); + } + return arrS.join('') === arrT.join(''); // 比较两个字符串是否相等 +}; + +//双栈精简 +var backspaceCompare = function(s, t) { + const getString = s => { + let arrS = []; + for(let char of s){ + char === '#' ? arrS.pop() : arrS.push(char); + } + return arrS.join(''); + } + return getString(s) === getString(t); +}; + +//双指针 +var backspaceCompare = function(s, t) { + let sSkipNum = 0; // 记录s的#数量 + let tSkipNum = 0; // 记录t的#数量 + let i = s.length - 1, j = t.length - 1; + while(true) { + while(i >= 0){ // 从后向前,消除s的# + if(s[i] === '#') sSkipNum++; + else { + if (sSkipNum > 0) sSkipNum--; + else break; + } + i--; + } + while (j >= 0) { // 从后向前,消除t的# + if (t[j] === '#') tSkipNum++; + else { + if (tSkipNum > 0) tSkipNum--; + else break; + } + j--; + } + // 后半部分#消除完了,接下来比较s[i] != t[j] + if (i < 0 || j < 0) break; // s 或者t 遍历到头了 + if (s[i] !== t[j]) return false; + i--;j--; + } + // 说明s和t同时遍历完毕 + if (i == -1 && j == -1) return true; + return false; +}; + +``` ----------------------- * 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)