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