Skip to content

Commit 142b8a3

Browse files
committed
feat: add solutions to lc problem: No.0844
No.0844.Backspace String Compare
1 parent 6a972f9 commit 142b8a3

File tree

6 files changed

+463
-2
lines changed

6 files changed

+463
-2
lines changed

solution/0800-0899/0844.Backspace String Compare/README.md

+160-1
Original file line numberDiff line numberDiff line change
@@ -56,22 +56,181 @@
5656

5757
<!-- 这里可写通用的实现逻辑 -->
5858

59+
**方法一:双指针**
60+
61+
时间复杂度 O(len(s) + len(t)),空间复杂度 O(1)。
62+
5963
<!-- tabs:start -->
6064

6165
### **Python3**
6266

6367
<!-- 这里可写当前语言的特殊实现逻辑 -->
6468

6569
```python
66-
70+
class Solution:
71+
def backspaceCompare(self, s: str, t: str) -> bool:
72+
i, j, skip1, skip2 = len(s) - 1, len(t) - 1, 0, 0
73+
while i >= 0 or j >= 0:
74+
while i >= 0:
75+
if s[i] == '#':
76+
skip1 += 1
77+
i -= 1
78+
elif skip1:
79+
skip1 -= 1
80+
i -= 1
81+
else:
82+
break
83+
while j >= 0:
84+
if t[j] == '#':
85+
skip2 += 1
86+
j -= 1
87+
elif skip2:
88+
skip2 -= 1
89+
j -= 1
90+
else:
91+
break
92+
if i >= 0 and j >= 0:
93+
if s[i] != t[j]:
94+
return False
95+
elif i >= 0 or j >= 0:
96+
return False
97+
i, j = i - 1, j - 1
98+
return True
6799
```
68100

69101
### **Java**
70102

71103
<!-- 这里可写当前语言的特殊实现逻辑 -->
72104

73105
```java
106+
class Solution {
107+
public boolean backspaceCompare(String s, String t) {
108+
int i = s.length() - 1, j = t.length() - 1;
109+
int skip1 = 0, skip2 = 0;
110+
for (; i >= 0 || j >= 0; --i, --j) {
111+
while (i >= 0) {
112+
if (s.charAt(i) == '#') {
113+
++skip1;
114+
--i;
115+
} else if (skip1 > 0) {
116+
--skip1;
117+
--i;
118+
} else {
119+
break;
120+
}
121+
}
122+
while (j >= 0) {
123+
if (t.charAt(j) == '#') {
124+
++skip2;
125+
--j;
126+
} else if (skip2 > 0) {
127+
--skip2;
128+
--j;
129+
} else {
130+
break;
131+
}
132+
}
133+
if (i >= 0 && j >= 0) {
134+
if (s.charAt(i) != t.charAt(j)) {
135+
return false;
136+
}
137+
} else if (i >= 0 || j >= 0) {
138+
return false;
139+
}
140+
}
141+
return true;
142+
}
143+
}
144+
```
145+
146+
### **C++**
147+
148+
```cpp
149+
class Solution {
150+
public:
151+
bool backspaceCompare(string s, string t) {
152+
int i = s.size() - 1, j = t.size() - 1;
153+
int skip1 = 0, skip2 = 0;
154+
for (; i >= 0 || j >= 0; --i, --j)
155+
{
156+
while (i >= 0)
157+
{
158+
if (s[i] == '#')
159+
{
160+
++skip1;
161+
--i;
162+
}
163+
else if (skip1)
164+
{
165+
--skip1;
166+
--i;
167+
}
168+
else break;
169+
}
170+
while (j >= 0)
171+
{
172+
if (t[j] == '#')
173+
{
174+
++skip2;
175+
--j;
176+
}
177+
else if (skip2)
178+
{
179+
--skip2;
180+
--j;
181+
}
182+
else break;
183+
}
184+
if (i >= 0 && j >= 0)
185+
{
186+
if (s[i] != t[j]) return false;
187+
}
188+
else if (i >= 0 || j >= 0) return false;
189+
}
190+
return true;
191+
}
192+
};
193+
```
74194
195+
### **Go**
196+
197+
```go
198+
func backspaceCompare(s string, t string) bool {
199+
i, j := len(s)-1, len(t)-1
200+
skip1, skip2 := 0, 0
201+
for ; i >= 0 || j >= 0; i, j = i-1, j-1 {
202+
for i >= 0 {
203+
if s[i] == '#' {
204+
skip1++
205+
i--
206+
} else if skip1 > 0 {
207+
skip1--
208+
i--
209+
} else {
210+
break
211+
}
212+
}
213+
for j >= 0 {
214+
if t[j] == '#' {
215+
skip2++
216+
j--
217+
} else if skip2 > 0 {
218+
skip2--
219+
j--
220+
} else {
221+
break
222+
}
223+
}
224+
if i >= 0 && j >= 0 {
225+
if s[i] != t[j] {
226+
return false
227+
}
228+
} else if i >= 0 || j >= 0 {
229+
return false
230+
}
231+
}
232+
return true
233+
}
75234
```
76235

77236
### **...**

solution/0800-0899/0844.Backspace String Compare/README_EN.md

+156-1
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,168 @@
5151
### **Python3**
5252

5353
```python
54-
54+
class Solution:
55+
def backspaceCompare(self, s: str, t: str) -> bool:
56+
i, j, skip1, skip2 = len(s) - 1, len(t) - 1, 0, 0
57+
while i >= 0 or j >= 0:
58+
while i >= 0:
59+
if s[i] == '#':
60+
skip1 += 1
61+
i -= 1
62+
elif skip1:
63+
skip1 -= 1
64+
i -= 1
65+
else:
66+
break
67+
while j >= 0:
68+
if t[j] == '#':
69+
skip2 += 1
70+
j -= 1
71+
elif skip2:
72+
skip2 -= 1
73+
j -= 1
74+
else:
75+
break
76+
if i >= 0 and j >= 0:
77+
if s[i] != t[j]:
78+
return False
79+
elif i >= 0 or j >= 0:
80+
return False
81+
i, j = i - 1, j - 1
82+
return True
5583
```
5684

5785
### **Java**
5886

5987
```java
88+
class Solution {
89+
public boolean backspaceCompare(String s, String t) {
90+
int i = s.length() - 1, j = t.length() - 1;
91+
int skip1 = 0, skip2 = 0;
92+
for (; i >= 0 || j >= 0; --i, --j) {
93+
while (i >= 0) {
94+
if (s.charAt(i) == '#') {
95+
++skip1;
96+
--i;
97+
} else if (skip1 > 0) {
98+
--skip1;
99+
--i;
100+
} else {
101+
break;
102+
}
103+
}
104+
while (j >= 0) {
105+
if (t.charAt(j) == '#') {
106+
++skip2;
107+
--j;
108+
} else if (skip2 > 0) {
109+
--skip2;
110+
--j;
111+
} else {
112+
break;
113+
}
114+
}
115+
if (i >= 0 && j >= 0) {
116+
if (s.charAt(i) != t.charAt(j)) {
117+
return false;
118+
}
119+
} else if (i >= 0 || j >= 0) {
120+
return false;
121+
}
122+
}
123+
return true;
124+
}
125+
}
126+
```
127+
128+
### **C++**
129+
130+
```cpp
131+
class Solution {
132+
public:
133+
bool backspaceCompare(string s, string t) {
134+
int i = s.size() - 1, j = t.size() - 1;
135+
int skip1 = 0, skip2 = 0;
136+
for (; i >= 0 || j >= 0; --i, --j)
137+
{
138+
while (i >= 0)
139+
{
140+
if (s[i] == '#')
141+
{
142+
++skip1;
143+
--i;
144+
}
145+
else if (skip1)
146+
{
147+
--skip1;
148+
--i;
149+
}
150+
else break;
151+
}
152+
while (j >= 0)
153+
{
154+
if (t[j] == '#')
155+
{
156+
++skip2;
157+
--j;
158+
}
159+
else if (skip2)
160+
{
161+
--skip2;
162+
--j;
163+
}
164+
else break;
165+
}
166+
if (i >= 0 && j >= 0)
167+
{
168+
if (s[i] != t[j]) return false;
169+
}
170+
else if (i >= 0 || j >= 0) return false;
171+
}
172+
return true;
173+
}
174+
};
175+
```
60176
177+
### **Go**
178+
179+
```go
180+
func backspaceCompare(s string, t string) bool {
181+
i, j := len(s)-1, len(t)-1
182+
skip1, skip2 := 0, 0
183+
for ; i >= 0 || j >= 0; i, j = i-1, j-1 {
184+
for i >= 0 {
185+
if s[i] == '#' {
186+
skip1++
187+
i--
188+
} else if skip1 > 0 {
189+
skip1--
190+
i--
191+
} else {
192+
break
193+
}
194+
}
195+
for j >= 0 {
196+
if t[j] == '#' {
197+
skip2++
198+
j--
199+
} else if skip2 > 0 {
200+
skip2--
201+
j--
202+
} else {
203+
break
204+
}
205+
}
206+
if i >= 0 && j >= 0 {
207+
if s[i] != t[j] {
208+
return false
209+
}
210+
} else if i >= 0 || j >= 0 {
211+
return false
212+
}
213+
}
214+
return true
215+
}
61216
```
62217

63218
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
class Solution {
2+
public:
3+
bool backspaceCompare(string s, string t) {
4+
int i = s.size() - 1, j = t.size() - 1;
5+
int skip1 = 0, skip2 = 0;
6+
for (; i >= 0 || j >= 0; --i, --j)
7+
{
8+
while (i >= 0)
9+
{
10+
if (s[i] == '#')
11+
{
12+
++skip1;
13+
--i;
14+
}
15+
else if (skip1)
16+
{
17+
--skip1;
18+
--i;
19+
}
20+
else break;
21+
}
22+
while (j >= 0)
23+
{
24+
if (t[j] == '#')
25+
{
26+
++skip2;
27+
--j;
28+
}
29+
else if (skip2)
30+
{
31+
--skip2;
32+
--j;
33+
}
34+
else break;
35+
}
36+
if (i >= 0 && j >= 0)
37+
{
38+
if (s[i] != t[j]) return false;
39+
}
40+
else if (i >= 0 || j >= 0) return false;
41+
}
42+
return true;
43+
}
44+
};

0 commit comments

Comments
 (0)