Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 78c9305

Browse files
Backspace String Compare
1 parent f25f9db commit 78c9305

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
/*
2+
Given two strings S and T, return if they are equal when both are typed into empty text editors. # means a backspace character.
3+
https://leetcode.com/problems/backspace-string-compare
4+
5+
Example 1:
6+
7+
Input: S = "ab#c", T = "ad#c"
8+
Output: true
9+
Explanation: Both S and T become "ac".
10+
Example 2:
11+
12+
Input: S = "ab##", T = "c#d#"
13+
Output: true
14+
Explanation: Both S and T become "".
15+
Example 3:
16+
17+
Input: S = "a##c", T = "#a#c"
18+
Output: true
19+
Explanation: Both S and T become "c".
20+
Example 4:
21+
22+
Input: S = "a#c", T = "b"
23+
Output: false
24+
Explanation: S becomes "c" while T becomes "b".
25+
Note:
26+
27+
1 <= S.length <= 200
28+
1 <= T.length <= 200
29+
S and T only contain lowercase letters and '#' characters.
30+
Follow up:
31+
32+
Can you solve it in O(N) time and O(1) space?
33+
*/
34+
35+
/**
36+
* @param {string} S
37+
* @param {string} T
38+
* @return {boolean}
39+
*/
40+
var backspaceCompare = function(S, T) {
41+
var iterS = S.length - 1;
42+
var iterT = T.length - 1;
43+
44+
while(iterS >= 0 || iterT >= 0) {
45+
if(iterS >= 0 && S.charAt(iterS) === "#") {
46+
var countBack = 0;
47+
while(iterS >= 0 && (countBack > 0 || S[iterS] === "#")) {
48+
if(iterS >= 0 && S[iterS] === "#") {
49+
countBack++;
50+
} else {
51+
countBack--;
52+
}
53+
54+
iterS--;
55+
}
56+
} else if(iterT >= 0 && T.charAt(iterT) === "#") {
57+
var countBack = 0;
58+
while(iterT >= 0 && (countBack > 0 || T[iterT] === "#")) {
59+
if(iterT >= 0 && T[iterT] === "#") {
60+
countBack++;
61+
} else {
62+
countBack--;
63+
}
64+
65+
iterT--;
66+
}
67+
} else {
68+
if(iterS < 0 || iterT < 0 || S.charAt(iterS) !== T.charAt(iterT))
69+
return false;
70+
71+
iterS--;
72+
iterT--;
73+
}
74+
}
75+
76+
return iterS < 0 && iterT < 0;
77+
};
78+
79+
// Naive Aproach
80+
var backspaceCompare2 = function(S, T) {
81+
var stackS = [];
82+
for(var i = 0; i < S.length; i++) {
83+
if(S.charAt(i) === "#")
84+
stackS.shift();
85+
else
86+
stackS.unshift(S.charAt(i));
87+
}
88+
89+
var stackT = [];
90+
for(var i = 0; i < T.length; i++) {
91+
if(T.charAt(i) === "#")
92+
stackT.shift();
93+
else
94+
stackT.unshift(T.charAt(i));
95+
}
96+
97+
while(stackS.length > 0 && stackT.length > 0) {
98+
var elemS = stackS.shift();
99+
var elemT = stackT.shift();
100+
if(elemS !== elemT)
101+
return false;
102+
103+
}
104+
105+
return stackS.length === 0 && stackT.length === 0;
106+
};
107+
108+
var main = function() {
109+
console.log(backspaceCompare("ab#c", "ad#c")); // true
110+
console.log(backspaceCompare("ab##", "c#d#")); // true
111+
console.log(backspaceCompare("a##c", "#a#c")); // true
112+
console.log(backspaceCompare("a#c", "b")); // false
113+
114+
console.log(backspaceCompare2("ab#c", "ad#c")); // true
115+
console.log(backspaceCompare2("ab##", "c#d#")); // true
116+
console.log(backspaceCompare2("a##c", "#a#c")); // true
117+
console.log(backspaceCompare2("a#c", "b")); // false
118+
}
119+
120+
module.exports.main = main;

0 commit comments

Comments
 (0)