Here you can find the source of lcs(String a, String b)
public static String lcs(String a, String b)
//package com.java2s; /*********************************************************************** * * This software is Copyright (C) 2013 Fabio Corubolo - corubolo@gmail.com - and Meriem Bendis * The University of Liverpool/* w w w. jav a2 s.com*/ * * * BranchingStoryGenerator is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * BranchingStoryGenerator is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with JavaFF. If not, see <http://www.gnu.org/licenses/>. * ************************************************************************/ public class Main { public static String lcs(String a, String b) { int[][] lengths = new int[a.length() + 1][b.length() + 1]; // row 0 and column 0 are initialized to 0 already for (int i = 0; i < a.length(); i++) for (int j = 0; j < b.length(); j++) if (a.charAt(i) == b.charAt(j)) lengths[i + 1][j + 1] = lengths[i][j] + 1; else lengths[i + 1][j + 1] = Math.max(lengths[i + 1][j], lengths[i][j + 1]); // read the substring out from the matrix StringBuffer sb = new StringBuffer(); for (int x = a.length(), y = b.length(); x != 0 && y != 0;) { if (lengths[x][y] == lengths[x - 1][y]) x--; else if (lengths[x][y] == lengths[x][y - 1]) y--; else { assert a.charAt(x - 1) == b.charAt(y - 1); sb.append(a.charAt(x - 1)); x--; y--; } } return sb.reverse().toString(); } }