【leetcode】844 Backspace String Compare

这道题很有趣,很灵活。
我的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class Solution {
public:
bool backspaceCompare(string S, string T) {
string s1 = delS(S);
string t1 = delS(T);
int len = s1.size() < t1.size() ? s1.size() : t1.size();
for (int i = 0; i < len; i++) {
if (s1[i] != t1[i]) { return false; }
}
return true;
}

string delS(string S) {
string S2 = S;

int len = S.size();
for (int i = 0; i < len; i++) { S2[i] = '0'; }

for (int i = len - 1; i >= 0; i--) {
if (S[i] == '#') {
S[i] = '0';
int k = i - 1;
int delCnt = 1;
while (k >= 0 && S[k] == '#')
{
S[k] = '0';
delCnt++;
k--;
}
while (delCnt > 0 && k >= 0) {
if (S[k] != '#' && S[k] != '0') {
S[k] = '0';
k--; delCnt--;
}
else { k--; };
}


}
}
int ind = 0;
for (int i = 0; i <= len - 1; i++) {
if (S[i] != '0') { S2[ind++] = S[i]; }
}
return S2;
}
};

大佬代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
bool backspaceCompare(string S, string T) {
if (delS(S) == delS(T)) { return true; }
else { return false; }
}

string delS(string S) {
stack<char> stk;
for (char c : S) {
if (c != '#') {
stk.push(c);
}
else {
if (!stk.empty()) {
stk.pop();
}
}
}
string str="";
while (!stk.empty()) {
str += stk.top();
stk.pop();
}

return str;
}
};

大佬代码2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
bool backspaceCompare(string S, string T) {
int i = S.length() - 1, j = T.length() - 1;
int skipS = 0, skipT = 0;
while (i >= 0 || j >= 0){
while (i >= 0) {
if (S[i] == '#') { skipS++; i--; }
else if (skipS > 0) { skipS--; i--; }
else { break; }
}
while (j >= 0) {
if (T[j] == '#') { skipT++;j--; }
else if (skipT > 0) { skipT--; j--; }
else { break; }
}
if (i>=0 && j>=0 && S[i] != T[j]) { return false; }
i--, j--;
}
return false;
}

};

参考资料
原题链接