public class FunSeq {

    public static int sottosequenza(String s) {
        char bit;           // l'elemento corrente della sequenza
        int cont = 0;       // lunghezza attuale della sequenza di zeri;
        int maxlung = 0;    // valore temporaneo della massima lunghezza;

        for (int i = 0; i < s.length(); i++) {
            bit = s.charAt(i);
    
            if (bit == '0') {        // e' stato letto un altro '0'
                cont++;                // aggiorna la lunghezza della sequenza corrente
                if (cont > maxlung)    // se necessario, aggiorna il massimo temporaneo
                    maxlung = cont;
            } else                   // e' stato letto un 1 (o il 2 finale)
                cont = 0;              // azzera la lunghezza della sequenza corrente
        }

        return maxlung;
    }
    
    public static int sottosequenza2(String s) {
        boolean hoLetto0 = false;
        char bit;           // l'elemento corrente della sequenza
        int cont = 0;       // lunghezza attuale della sequenza di zeri;
        int maxlung = 0;    // valore temporaneo della massima lunghezza;
        boolean stoLeggendo0 = false;
        for (int i = 0; i < s.length(); i++) {
            bit = s.charAt(i);
            if (stoLeggendo0) 
                if (bit == '0') {
                    stoLeggendo0 = true;
                    cont++; 
                }
                else {/* bit == '1' */
                    stoLeggendo0 = false;
                    if (cont > maxlung) maxlung = cont;
                    cont = 0;
                }
            else /*!stoLeggendo0 */
                if (bit == '0') {
                    stoLeggendo0 = true;
                    cont++;
                }
                else /* bit == '1' */
                    stoLeggendo0 = false;
        }
        return maxlung;
    }
    
}

