/** * classe che calcola la massima comune sottostringa fra due stringhe * @author Adriano Luchetta * @version 1 Ottobre-2003 * Algoritmo * Esempio nella ricerca nelle stringhe "Pluto" "Flauto" * la stringa di lunghezza minore e' "Pluto"; sia k la lunghezza della stringa * 1 viene verificato se la sottostringa k-esima "Pluto" e' una sottostringa di "Flauto" * 2 viene verificato se le sottostringhe (k-1)-esime "Plut" "luto" sono sottostringhe di Flauto * 3 viene verificato se le sottostringhe (k-2)-esime "Plu" "lut" "uto" sono sottostringhe di Flauto */ public class MaxSottostringa1 { public static void main(String[] args) { if (args.length < 2) { System.out.println("uso: $java Sottostringa stringa1 stringa2"); System.exit(1); } String corta = args[0]; String lunga = args[1]; if (lunga.length() < corta.length()) { corta = args[1]; lunga = args[0]; } int i = corta.length(); boolean found = false; String max = ""; int count = 0; while (i > 0 && !found) { for (int j = 0; i + j <= corta.length(); j++) { for (int k = 0; i + k <= lunga.length(); k++) { count++; if (corta.substring(j, i + j).equals(lunga.substring(k, i + k))) { max = max + corta.substring(j, i + j) + " "; found = true; } } } i--; } System.out.println("La piu' lunga sottostringa comune e': " + max); System.out.println("Iterazioni necessarie a trovarla: " + count); } }