-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackspace_string_compare_test.dart
74 lines (64 loc) · 1.8 KB
/
backspace_string_compare_test.dart
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import 'dart:collection';
import 'package:test/test.dart';
bool backspaceStringCompare(String a, String b) {
Iterable<String> reverse(String input) sync* {
var backspaces = 0;
for (var i = input.length - 1; i >= 0; i--) {
final ch = input[i];
if (ch == '#') {
backspaces++;
continue;
}
if (backspaces > 0) {
backspaces--;
continue;
}
yield ch;
}
}
var aIter = reverse(a).iterator, bIter = reverse(b).iterator;
while (true) {
var aNext = aIter.moveNext();
var bNext = bIter.moveNext();
if (aNext != bNext) return false;
if (!aNext && !bNext) return true;
if (aIter.current != bIter.current) return false;
}
}
bool backspaceStringCompareStacks(String a, String b) {
Queue stack(String input) {
final result = DoubleLinkedQueue<String>();
for (var i = 0; i < input.length; i++) {
final ch = input[i];
if (ch == '#') {
result.popMaybe();
} else {
result.push(ch);
}
}
return result;
}
bool compare(Queue a, Queue b) {
if (a.length != b.length) return false;
while (a.isNotEmpty) if (a.pop() != b.pop()) return false;
return true;
}
return compare(stack(a), stack(b));
}
extension StackQueue<T> on Queue<T> {
void push(T value) => addLast(value);
T pop() => removeLast();
T? popMaybe() => this.isEmpty ? null : removeLast();
}
void main() {
test('lc', () {
expect(backspaceStringCompare('ab#c', 'ad#c'), true);
expect(backspaceStringCompare('ab##', 'c#d#'), true);
expect(backspaceStringCompare('a#c', 'b'), false);
});
test('my examples', () {
expect(backspaceStringCompare('ab#cd', 'ad#cde#'), true);
expect(backspaceStringCompare('abc##', 'a'), true);
expect(backspaceStringCompare('a', 'b'), false);
});
}