Soluzione 4.4

Ecco una possibile soluzione. Leggere con attenzione i commenti per capire come funziona l'algoritmo realizzato nel metodo seqMatch
import java.util.Scanner;

public class SubsequenceTester
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        System.out.println("Inserire la prima stringa");
        String s1 = in.nextLine();
        System.out.println("Inserire la seconda stringa");
        String s2 = in.nextLine();

        if (seqMatch(s1,s2)) //cfr. il metodo seqMatch sotto
            System.out.println("E` una sottosequenza");
        else
            System.out.println("Non e` una sottosequenza");
    }


    /*
      Questo metodo verifica se s2 e` una sottosequenza di s1. In caso positivo
      restituisce il valore true, altrimenti restituisce il valore false

      L'algoritmo realizzato in questo metodo ragiona cosi`: scorriamo i
      caratteri di s1 finche` non ne troviamo uno che coincide con il primo
      carattere di s2. Se lo troviamo, allora continuiamo a scorrere i 
      caratteri di s1 finche` non ne troviamo uno che coincide con il secondo
      carattere di s2. E cosi` via. Se riesco ripetere questa operazione fino
      ad arrivare all'ultimo carattere di s2, allora ho dimostrato che s2 e` 
      una sottosequenza di s1
    */

    public static boolean seqMatch(String s1, String s2)
    {
        /*
          Usiamo due variabili int, i1, e i2, che "puntano" ai caratteri
          di s1 ed s2, rispettivamente
        */
        int i2 = 0;
        for (int i1 = 0; i1 < s1.length() && i2 < s2.length(); i1++)
            if (s1.charAt(i1) == s2.charAt(i2))
                i2++;	
        return i2 == s2.length();
    }
}