Question: I have this code that finds the longest common subsequence between two sequences X and Y (*with the condition that the elements must be consecutive

I have this code that finds the longest common subsequence between two sequences X and Y (*with the condition that the elements must be consecutive in the both X and Y)
The code (in Java):

import java.util.Scanner;

public class LCS {

public static void main(String[] args) {

System.out.println();

Scanner input = new Scanner(System.in);

// Taking the elemest and length of X and Y from user

System.out.print("Enter the length of the sequences X and Y: ");

int n = input.nextInt();

int[] X = new int[n];

int[] Y = new int[n];

System.out.print(" Enter the elements of sequence X: ");

for (int i = 0; i

X[i] = input.nextInt();

}

System.out.print(" Enter the elements of sequence Y: ");

for (int i = 0; i

Y[i] = input.nextInt();

}

input.close();

// Printing X and Y

System.out.println();

System.out.print("X = {");

for (int i = 0; i

System.out.print(X[i]);

if (i != n - 1) {

System.out.print(", ");

}

}

System.out.print("}");

System.out.println();

System.out.print("Y = {");

for (int j = 0; j

System.out.print(Y[j]);

if (j != n - 1) {

System.out.print(", ");

}

}

System.out.print("}");

// Finding the LCS

int[][] lcs = new int[n + 1][n + 1];

for (int i = 1; i

for (int j = 1; j

if (X[i - 1] == Y[j - 1]) {

lcs[i][j] = lcs[i - 1][j - 1] + 1;

} else {

lcs[i][j] = Math.max(lcs[i - 1][j], lcs[i][j - 1]);

}

}

}

// Getting the length of LCS

int length = lcs[n][n];

// Getting the LCS elements

int[] S = new int[length];

int i = n;

int j = n;

int k = length - 1;

while (i > 0 && j > 0) {

if (X[i - 1] == Y[j - 1]) {

S[k--] = X[i - 1];

i--;

j--;

} else if (lcs[i - 1][j] > lcs[i][j - 1]) {

i--;

} else {

j--;

}

}

// Printing the LCS elements

System.out.println(" ");

System.out.print("Longest common subsequence is S = {");

for (int m = 0; m

System.out.print(S[m]);

if (m != length - 1) {

System.out.print(", ");

}

}

System.out.print("}");

// Printing the length of LCS

System.out.print("with length " + length);

System.out.println(" n = " + length);

// Finding the starting index in X and Y

int startIndexX = -1;

int startIndexY = -1;

for (i = 0; i

if (X[i] == S[0]) {

startIndexX = i;

break;

}

}

for (j = 0; j

if (Y[j] == S[0]) {

startIndexY = j;

break;

}

}

// Printing the start index of X and Y

System.out.println("i = " + startIndexX);

System.out.println("j = " + startIndexY);

System.out.println();

}

}

*the problem is that when I ran the program with the example:

X = {1, 2, 3, 5, 4, 7}

Y = {0, 4, 1, 2, 3, 7}

it gave me the output, S = {1, 2, 3, 7}

which is wrong beacuse 7 is not consecutive with the other elements in X and Y.

What do I need to change in my code to solve this issue?

I have this code that finds the longest common subsequence between two

PROBLEMS 1 OUTPUT Enter the length of the sequences X and Y:6 Enter the elements of sequence X:1 2 3 5 4 Enter the elements of sequence Y:0 4 1 2 3 7 X={1,2,3,5,4,7} Y={0,4,1,2,3,7} Longestcommonsubsequenceisn=4S={1,2,3,7} with length 4 i=0j=2

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!