Soluzione 5.3

Effettuiamo la ricerca di tutte le sottostringhe comuni a partire da ogni casattere della prima stringa e da ogni carattere della seconda stringa.
Osservare anche il passaggio dei parametri dalla riga di comando.
public class MaxSubstringFinder
{  
    public static void main(String[] args)
    {
        if (args.length != 2)
        {
            System.out.println("Uso: $java  ");
            System.exit(1);
        }
    
        String s1 = args[0];
        String s2 = args[1];
        String max = "";
    
        // i e' l'indice di inizio della sottostringa in s1
        for (int i = 0; i < s1.length(); i++)
        {  
            // j e' l'indice di inizio della sottostringa in s2
            for (int j = 0; j < s2.length(); j++)
            {
                int k = 0; // k e' la lunghezza della sottostringa in esame
                boolean isInSubstring = true;  // e` true se il char in  
                                               //esame e` nella sottostringa
                while (isInSubstring && i+k < s1.length() && j+k < s2.length())
                {
                    if (s1.charAt(i+k) != s2.charAt(j+k)) //la sottostringa
                        isInSubstring = false;            //comune e' finita
                    else
                        k++;
                }
                if (k > max.length())
                    max = s1.substring(i, i+k);
            }
        }
        System.out.println("Massima sottostringa comune: \"" + max +"\"");

    /*
    Ecco ora una soluzione un po' piu' veloce... come mai funziona?
    Prestare attenzione alla condizione di uscita del ciclo esterno

    for (int i = 0; i < s1.length() - max.length(); i++)
    {  
      for (int j = 0; j < s2.length() - max.length(); j++)
      {
        int k = 0; 
        boolean isInSubstring = true; 
        while (i+k < s1.length() && j+k < s2.length() && isInSubstring)
        {
            if (s1.charAt(i+k) != s2.charAt(j+k))
                isInSubstring = false; 
            else
                k++;
        }
        if (k > max.length())
            max = s1.substring(i, i+k);
      }
    }

    */

    }
}