• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

link-intersystems / lis-commons / #252

22 Sep 2023 04:09PM UTC coverage: 89.886% (+0.08%) from 89.804%
#252

Pull #6

renelink
Added longest common sequence implementation.
Pull Request #6: Feature/sequence

106 of 106 new or added lines in 6 files covered. (100.0%)

7492 of 8335 relevant lines covered (89.89%)

0.9 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.24
/lis-commons-util/src/main/java/com/link_intersystems/util/diff/LongestCommonSubsequenceTable.java
1
package com.link_intersystems.util.diff;
2

3
import com.link_intersystems.util.table.IntTable;
4
import com.link_intersystems.util.Sequence;
5

6
import java.util.Objects;
7

8
import static java.util.Objects.*;
9

10
public class LongestCommonSubsequenceTable<E> implements IntTable {
11

12
    private final Sequence<E> rowSequence;
13
    private final Sequence<E> columnSequence;
14

15
    private int[][] table;
16
    private LongestCommonSubsequencePath LongestCommonSubsequencePath;
17

18
    public LongestCommonSubsequenceTable(Sequence<E> rowSequence, Sequence<E> columnSequence) {
1✔
19
        this.rowSequence = requireNonNull(rowSequence);
1✔
20
        this.columnSequence = requireNonNull(columnSequence);
1✔
21
    }
1✔
22

23
    public int[][] getTable() {
24
        if (table != null) {
1✔
25
            return table;
1✔
26
        }
27

28
        table = new int[rowSequence.length() + 1][columnSequence.length() + 1];
1✔
29

30
        for (int row = 1; row <= rowSequence.length(); row++) {
1✔
31
            for (int column = 1; column <= columnSequence.length(); column++) {
1✔
32
                if (Objects.equals(rowSequence.elementAt(row - 1), columnSequence.elementAt(column - 1))) {
1✔
33
                    table[row][column] = table[row - 1][column - 1] + 1;
1✔
34
                } else {
35
                    table[row][column] = Math.max(table[row - 1][column], table[row][column - 1]);
1✔
36
                }
37
            }
38
        }
39

40
        return table;
1✔
41
    }
42

43
    public int getValue(int row, int column) {
44
        return getTable()[row][column];
1✔
45
    }
46

47
    public Sequence<E> getLcsPath() {
48
        if (LongestCommonSubsequencePath != null) {
1✔
49
            return LongestCommonSubsequencePath;
×
50
        }
51

52
        return LongestCommonSubsequencePath = new LongestCommonSubsequencePath<>(this, getRowSequence(), getColumnSequence());
1✔
53
    }
54

55
    public Sequence<E> getRowSequence() {
56
        return rowSequence;
1✔
57
    }
58

59
    public Sequence<E> getColumnSequence() {
60
        return columnSequence;
1✔
61
    }
62

63
    @Override
64
    public int getColumnCount() {
65
        return columnSequence.length() + 1;
1✔
66
    }
67

68
    @Override
69
    public int getRowCount() {
70
        return rowSequence.length() + 1;
1✔
71
    }
72
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc