This is a java program to implement LCS. The longest common subsequence (LCS) problem is to find the longest subsequence common to all sequences in a set of sequences (often just two). (Note that a subsequence is different from a substring, for the terms of the former need not be consecutive terms of the original sequence.) It is a classic computer science problem, the basis of data comparison programs such as the diff utility, and has applications in bioinformatics.
Here is the source code of the Java Program to Find the Longest Subsequence Common to All Sequences in a Set of Sequences. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
package com.maixuanviet.setandstring; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class LongestCommonSubsequencetoSequences { public static String lcs(String[] strings) { if (strings.length == 0) return ""; if (strings.length == 1) return strings[0]; int max = -1; int cacheSize = 1; for (int i = 0; i < strings.length; i++) { cacheSize *= strings[i].length(); if (strings[i].length() > max) max = strings[i].length(); } String[] cache = new String[cacheSize]; int[] indexes = new int[strings.length]; for (int i = 0; i < indexes.length; i++) indexes[i] = strings[i].length() - 1; return lcsBack(strings, indexes, cache); } public static String lcsBack(String[] strings, int[] indexes, String[] cache) { for (int i = 0; i < indexes.length; i++) if (indexes[i] == -1) return ""; boolean match = true; for (int i = 1; i < indexes.length; i++) { if (strings[0].charAt(indexes[0]) != strings[i].charAt(indexes[i])) { match = false; break; } } if (match) { int[] newIndexes = new int[indexes.length]; for (int i = 0; i < indexes.length; i++) newIndexes[i] = indexes[i] - 1; String result = lcsBack(strings, newIndexes, cache) + strings[0].charAt(indexes[0]); cache[calcCachePos(indexes, strings)] = result; return result; } else { String[] subStrings = new String[strings.length]; for (int i = 0; i < strings.length; i++) { if (indexes[i] <= 0) subStrings[i] = ""; else { int[] newIndexes = new int[indexes.length]; for (int j = 0; j < indexes.length; j++) newIndexes[j] = indexes[j]; newIndexes[i]--; int cachePos = calcCachePos(newIndexes, strings); if (cache[cachePos] == null) subStrings[i] = lcsBack(strings, newIndexes, cache); else subStrings[i] = cache[cachePos]; } } String longestString = ""; int longestlength = 0; for (int i = 0; i < subStrings.length; i++) { if (subStrings[i].length() > longestlength) { longestString = subStrings[i]; longestlength = longestString.length(); } } cache[calcCachePos(indexes, strings)] = longestString; return longestString; } } public static int calcCachePos(int[] indexes, String[] strings) { int factor = 1; int pos = 0; for (int i = 0; i < indexes.length; i++) { pos += indexes[i] * factor; factor *= strings[i].length(); } return pos; } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Longest Common Subsequence Algorithm Test"); System.out.println("Enter string 1"); String str1 = br.readLine(); System.out.println("Enter string 2"); String str2 = br.readLine(); System.out.println("Enter string 3"); String str3 = br.readLine(); System.out.println("Enter string 4"); String str4 = br.readLine(); String[] str = new String[] { str1, str2, str3, str4 }; System.out.println(lcs(str)); } }
Related posts:
Guide to UUID in Java
List Interface trong Java
Hướng dẫn Java Design Pattern – Interpreter
Java CyclicBarrier vs CountDownLatch
Java Program to Implement Merge Sort on n Numbers Without tail-recursion
Java Program to Implement wheel Sieve to Generate Prime Numbers Between Given Range
Getting the Size of an Iterable in Java
Java – Generate Random String
Netflix Archaius with Various Database Configurations
Java Program to Implement Fisher-Yates Algorithm for Array Shuffling
HttpClient 4 Cookbook
Java Program to Check Cycle in a Graph using Graph traversal
A Guide to JUnit 5 Extensions
Mapping Nested Values with Jackson
Java Program to Compute the Area of a Triangle Using Determinants
Java Convenience Factory Methods for Collections
Spring Boot - Bootstrapping
Java Program to Implement Caesar Cypher
Compact Strings in Java 9
Calling Stored Procedures from Spring Data JPA Repositories
Spring Boot - Enabling HTTPS
Apache Commons Collections MapUtils
Hướng dẫn Java Design Pattern – Service Locator
Java Program to Implement Merge Sort Algorithm on Linked List
Spring WebClient Filters
The DAO with JPA and Spring
Annotation trong Java 8
Configure a Spring Boot Web Application
Guide to BufferedReader
Java Program to Implement Regular Falsi Algorithm
Java Program to Describe the Representation of Graph using Incidence Matrix
Using JWT with Spring Security OAuth (legacy stack)