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:
Java Program to Implement Binary Heap
Java Program to Check if any Graph is Possible to be Constructed for a Given Degree Sequence
Java Program to Describe the Representation of Graph using Incidence List
Spring Security – Reset Your Password
Xây dựng ứng dụng Client-Server với Socket trong Java
New Features in Java 10
Java Program to Implement Pagoda
Java Program to Implement Uniform-Cost Search
Logout in an OAuth Secured Application
Introduction to Thread Pools in Java
Java Program to Implement LinkedBlockingDeque API
Java Program to Implement Miller Rabin Primality Test Algorithm
Retrieve User Information in Spring Security
Beans and Dependency Injection
Java Program to Perform Insertion in a 2 Dimension K-D Tree
Java Program to Implement Min Hash
Java Program to Implement Dijkstra’s Algorithm using Queue
Spring Boot - Introduction
Phân biệt JVM, JRE, JDK
Java Program to Show the Duality Transformation of Line and Point
Recommended Package Structure of a Spring Boot Project
Java Program to do a Breadth First Search/Traversal on a graph non-recursively
Spring Boot - Google Cloud Platform
Collect a Java Stream to an Immutable Collection
Java Program to Implement Weight Balanced Tree
Kiểu dữ liệu Ngày Giờ (Date Time) trong java
Jackson – Bidirectional Relationships
Spring Boot - Twilio
Exploring the Spring 5 WebFlux URL Matching
Apache Tiles Integration with Spring MVC
HttpClient 4 – Send Custom Cookie
Guide to CountDownLatch in Java