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
Consider changing:
```
foo();
bar();
```
To:
```
if (true) {
foo();
}
```
What we want:
```
+ if (true) {
foo();
- bar();
+ }
```
A longest-common-subsequence algorithm is wrong here. The longest
subsequence is five tokens:
```
( ) ( ) ;
```
which leads to:
```
+if+ (+true+) +{+
+foo+();
-bar-();
+}+
```
so we claim `foo` is added. We want the following *four* tokens to be
preserved:
```
foo ( ) ;
```
Proposed solution: advance on both sides, keep first match.