[AIUTO] Eserczio java Stringhe ciclicamente equivalenti

amfuture
Ciao a tutti, questo e' il mio primo post! Qualcuno e' in grado di aiutarmi con il seguente esercizio in java?

[Identità ciclica] Due stringhe v e w sullo stesso alfabeto sono dette ciclicamente equivalenti sse esistono due stringhe x,y tali che v=xy e w=yx. È facile vedere che questo definisce una relazione di equivalenza sul monoide libero, le cui classi si chiamano collane. Scrivete un programma che, lette due stringhe, determini se sono ciclicamente equivalenti oppure no.

Non ho la minima idea di che algoritmo implementare! Grazie a chi vorra' anche solo provarci :)

Risposte
apatriarca
Ciao e benvenuto/a nel forum. Per la prossima volta ti consiglio di scrivere un titolo più significato nella discussione.

Venendo al tuo problema. Per una soluzione "ottimale" ci devo un po' pensare e riguardarmi i diversi algoritmi di string matching, ma è sicuramente possibile affidarsi ad una soluzione naif. È infatti sufficiente verificare se v e w rispettano quella proprietà per ogni sottostringa iniziale x di v. In codice è quindi qualcosa come (non l'ho testato):
boolean areEquivalent(String v, String w) {
    for (int i = 0; i < v.length(); ++i) {
        if (w.startsWith(v.substring(i)) && w.endsWith(v.substring(0, i))) {
            return true;
        }
    }
    return false;
}

amfuture
"apatriarca":
Ciao e benvenuto/a nel forum. Per la prossima volta ti consiglio di scrivere un titolo più significato nella discussione.

Venendo al tuo problema. Per una soluzione "ottimale" ci devo un po' pensare e riguardarmi i diversi algoritmi di string matching, ma è sicuramente possibile affidarsi ad una soluzione naif. È infatti sufficiente verificare se v e w rispettano quella proprietà per ogni sottostringa iniziale x di v. In codice è quindi qualcosa come (non l'ho testato):
boolean areEquivalent(String v, String w) {
    for (int i = 0; i < v.length(); ++i) {
        if (w.startsWith(v.substring(i)) && w.endsWith(v.substring(0, i))) {
            return true;
        }
    }
    return false;
}

beh che dirti grazie mille.. funziona :) era l'unico che mi tormentava domani posso andare all'orale sereno :) ti ringrazio

amfuture
per curiosita' ci sarebbe una soluzione piu' "ottimale" di questa? Che algoritmo utilizzeresti?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.