Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [JAVA] Risolvere un Metodo

    Salve! Volevo sapere la soluzione a questo metodo con la Ricorsione:

    Scrivere un metodo che dati un array di stringhe ed un intero K (K => 2)restituisce VERO se in A esistono almeno K stringhe di uguale lunghezza, altrimenti il metodo restituirà FALSO.

    In maniera Iterativa mi viene, ma con la Ricorsione stranamente no.
    Dite che servono almeno 3 metodi: uno che inizializza, uno che fa incrementare i ed un altro che fa incrementare j? Io praticamente questo array dovendolo scorrere e confrontare tutte le stringhe contenute penso che dovrei usare 2 contatori, no?

    Mi scrivete una vostra soluzione al problema?

    Grazie

    ciao

  2. #2
    ho messo nomi lunghi ai metodi per migliorare la comprensione

    ho usato due ricorsioni: una principale e una per contare le occorrenze.

    codice:
    // dato un array di stringe (a partire da un dato indice) 
    // conta il numero di stringhe di lunghezza data
    private static int quanteStessaLunghezza(int lunghezza, String[] array, int indiceControllo) {
        // passo base: se ho finito di scandire l'array ce ne sono 0 con la stessa lunghezza
        if(indiceControllo == array.length) {
            return 0; 
        /*
         * passo ricorsivo: 
         * se la prima è della lunghezza data restituisce 1 + il numero di stringhe
         * di lunghezza data nel resto dell'array.
         * Altrimenti il numero di stringhe di lunghezza data nel resto dell'array
         */
        } else {
            return quanteStessaLunghezza(lunghezza, array, indiceControllo+1)+
                (array[indiceControllo].length() == lunghezza?1:0);
        }
    }
    
    private static boolean almenoKStringheUgualiRic(int k, String[] array, int indiceControllo) {
        /* 
         * passo base: 
         * se k == 0 ritorna true
         * se indiceControllo == array.length (finito l'array) ritorna false
         */
        if(k == 0 || indiceControllo == array.length) {
            return k == 0;
        /*
         * passo ricorsivo:
         * prende la prima stringa e verifica se nel resto dell'array ce ne sono
         * almeno k-1 della stessa lunghezza. Se ci sono ritorna true,
         * altrimenti considera la stringa successiva...
         */ 
        } else {
            return quanteStessaLunghezza(   array[indiceControllo].length(), 
                                            array, 
                                            indiceControllo+1) == k - 1
                    || 
                        almenoKStringheUgualiRic(k, array, indiceControllo+1);
        }
    }
    public static boolean almenoKStringheUguali(int k, String[] array) {
        return almenoKStringheUgualiRic(k, array, 0);
    }
    
    public static void main(String[] args) {
        String strs[] = {"a", "aa", "aaa", "aaaa", "aaa", "aa", "aa", "aa"};
        System.out.println(almenoKStringheUguali(2, strs));
        System.out.println(almenoKStringheUguali(3, strs));
        System.out.println(almenoKStringheUguali(4, strs));
        System.out.println(almenoKStringheUguali(5, strs));
        System.out.println(almenoKStringheUguali(6, strs));
    }
    SO: Debian Sarge kernel 2.6.11
    Lang: Java, C++, C

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.