Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

I have a code that takes two sequences x and y and finds the longest common subsequence between them but only for elements that are

I have a code that takes two sequences x and y and finds the longest common subsequence between them but only for elements that are consecutive ( one after the other in both x and y)
But it's giving me an "ArrayIndexOutOfBoundException" when I run it.
the input was:
length = 4
X = {1, 2, 3, 7}
Y = {4, 1, 2, 7}
the output is supposed to be S = {1, 2} with length 2
here is my code:

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 < n; i++) {

X[i] = input.nextInt();

}

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

for (int i = 0; i < n; i++) {

Y[i] = input.nextInt();

}

input.close();

// Printing X and Y

System.out.println();

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

for (int i = 0; i < n; 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 < n; 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 <= n; i++) {

for (int j = 1; j <= n; 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;

int prev = -1;

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

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

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

i--;

j--;

prev = X[i - 1];

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

i--;

} else {

j--;

}

if (X[i - 1] == Y[j - 1] && prev + 1 != X[i - 1]) {

prev = -1;

}

}

// Printing the LCS elements

System.out.println(" ");

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

for (int m = 0; m < length; m++) {

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

if (m != length - 1) {

System.out.print(", ");

}

}

System.out.print("}");

// Printing the length of LCS

System.out.println(" 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 < n; i++) {

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

startIndexX = i;

break;

}

}

for (j = 0; j < n; 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();

}

}

What do I have to change to male it work right?

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Essential SQLAlchemy Mapping Python To Databases

Authors: Myers, Jason Myers

2nd Edition

1491916567, 9781491916568

More Books

Students also viewed these Databases questions

Question

Explain the purposes of managing performance.

Answered: 1 week ago

Question

List 4 methods to evaluate training.

Answered: 1 week ago