ciao a tutti!!
vi espongo il mio problema,e spero che qualcuno mi aiuti!!

Problema:dato un insieme di lavori ,stringhe(io ho considerato un array di stringhe)trovare per ogni coppia di lavori la lunghezza della piu lunga sottostringa comune,quindi inserire questi valori trovati in una matrice simmetrica,quindi basta considerare soltanto una matrice inferiore/superiore, lungo la diagonale principale bisogna mettere -1,

ad esempio:
ho 4 lavori/stringhe:
j1:abcd j1 j2 j3 j4
j2:bca j1 -1 2 3 4
j3:cabc
j4:abcd j2 2 -1 2 2

j3 3 2 -1 3

j4 4 2 3 -1
quindi per ogni coppia trovo la max lunghezza!!ad esempio tra j1 e j2 la max lunghezza è 2 e inserisco questo valore nella matrice nel rispettivo campo [j1][j2]e proseguofino a riempire la matrice,e infine mi faccio restituire la matrice!!

spero che qualcuno mi possa aiutare nel risolvere questo problema visto che è parte della mia tesi!!Ho provato a farlo ma credo di essermi incartato!!se potreste postarmi qualche soluzione al problema ve ne sarei grato!!
io ho fatto cosi, ma mi da l'errore di accesso a un aray fuori i limiti :
2
-1
-1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at lcs.Matrice.mLunghezzaSottostringa(Matrice.java:29 )
at lcs.provaLcs.main(provaLcs.java:18)

codice:
package lcs;

import java.util.List;

public class Matrice {
	public static int[][] mLunghezzaSottostringa(String[]job){
		int[][]matrice;
		int i,j;
		int sottostringa=0;
		
		/*creo una matrice triangolare inferiore in cui 
		 * inserire i valori*/
		matrice = new int [job.length][];
		for(i=0; i<matrice.length;i++) {
			matrice[i] =new int[i+1];
		}
			        /*confronto le stringhe due per volta*/
					for(i=0;i<job.length;i++){
		                for(j=i+1;i<job.length;j++){
                                       /*trovo la lunghezza della sottostringa tra due stringhe*/
		                	sottostringa= Lcs.longestCommonSubstring(job[i], job[j]);
					        System.out.println(sottostringa);
					        /*asesso vorrei inserire nella matrice triangolare 
					         * -1 sulla diagonale e per ogni riga 
					         * i rispettivi valori
					         * scorrendo la matrice inserisco i valori*/
							for(i=0; i<matrice[i].length;i++){
								for(j=0;i<matrice[i].length;j++){
									if(i==j){/*se l'indice di righa==indice di colonna*/
										matrice[i][j]=-1;
					    	            System.out.println(matrice[i][j]+"");
					                }else
					                matrice[i][j]=sottostringa;
					                System.out.println(matrice[i][j]+"");
		                        }
					         }
				        }
			         }
					return matrice;
	}
}
codice:
package lcs;
import java.util.*;

public class provaLcs {
	public static void main(String[] args) {
		String a ="abcd";
		String b ="bca";
		String c ="cabc";
		String d ="abcd";
	        String[] job= new String []{a,b,c,d};
		int[][] m =new int[job.length][job.length];
		m=Matrice.mLunghezzaSottostringa(job);