class LCS { // bestimmt größte Länge einer gemeinsamen Teilfolge static int lcs (char [] xs, char [] ys) { int a[][] = new int [xs.length][ys.length]; for (int i=0; i<xs.length; i++) { for (int j=0; j<ys.length; j++) { // Ziel: // a[i][j] enthält größte Länge einer gemeinsamen Teilfolge // von xs[0 .. i] und ys[0 ..j] } } return get (a, xs.length-1, ys.length-1); } // liefert Wert aus Array oder 0, falls Indizes zu klein sind static int get (int [][] a, int i, int j) { if ((i < 0) || (j <0)) { return 0; } else { return a[i][j]; } } public static void main(String[] args) { String xs = "ABCABBA"; String ys = "CBABAC"; System.out.println (lcs (xs.toCharArray(), ys.toCharArray())); } }Aufgaben:
LCS.lcs
Hinweis: int [][] a
wie oben ausrechnen und danach
vom Ende zum Anfang durchlaufen (ohne groß zu suchen).
damit dann die autotool-Aufgaben lösen.