Ja, das meinte ich. Also muss ich die nxm-Matrix durchgehen und je auf 3 Operationen testen? (n Länge Eingabe, m Länge Sollwort)
Wie kommt man an die möglichen Kandidaten für ein falschgeschriebenes Wort? (Also wie wählt man diese aus einer Array/List/Map/Set [sortiert, unsortiert, kleinste/größte oben/vorne usw.]?)
Und kann ich, wenn ich oben zwei benachbarte Zeichen-Elemente vertauscht habe, auch zurück, anstatt vor gehen (3 rekursive Aufrufe)?
Irgendwie ist dieses Thema schon spannend oder ned?
Grüße und Danke schon mal alle Kommentare
*** Edit ***
Oh, ich bin doch nicht doof/mad, ich hab’ einfach eine Zeile hinzugefügt, wer etwas damit anfangen kann:
int newIdx = idx + 1;
if (newIdx >= str.length()) {
if (!set.contains(str)) {
set.add(str);
verdrehen(str, 0, set);
}
} else {
verdrehen(str, newIdx, set);
verdrehen(str.substring(0, idx) + str.charAt(newIdx) + str.charAt(idx) + str.substring(newIdx + 1), newIdx, set);
}
return set;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
// TODO code application logic here
System.out.println(verdrehen("Hallo", 0, new HashSet<String>()));
System.out.println(verdrehen("Hallo", 0, new TreeSet<String>())); }```
Ausgabe
[spoiler]
run:
[lHloa, oHlal, olHal, Holal, oHlla, llHoa, ollaH, laHol, Hlola, aollH, alloH, loHal, alHol, llaHo, lloHa, Hloal, Hlaol, lHaol, allHo, laHlo, olalH, llaoH, oallH, aolHl, aHlol, oHall, lHlao, lHola, Hlloa, ollHa, Haoll, Holla, lHoal, oalHl, alHlo, oaHll, laloH, alolH, Hlalo, llHao, olHla, Hallo, loHla, aHllo, laolH, lloaH, loaHl, olaHl, loalH, laoHl, lolaH, Halol, lolHa, aoHll, lHalo, lalHo, aHoll, aloHl, Hoall, Hllao]
[Hallo, Halol, Haoll, Hlalo, Hlaol, Hllao, Hlloa, Hloal, Hlola, Hoall, Holal, Holla, aHllo, aHlol, aHoll, alHlo, alHol, allHo, alloH, aloHl, alolH, aoHll, aolHl, aollH, lHalo, lHaol, lHlao, lHloa, lHoal, lHola, laHlo, laHol, lalHo, laloH, laoHl, laolH, llHao, llHoa, llaHo, llaoH, lloHa, lloaH, loHal, loHla, loaHl, loalH, lolHa, lolaH, oHall, oHlal, oHlla, oaHll, oalHl, oallH, olHal, olHla, olaHl, olalH, ollHa, ollaH]
BUILD SUCCESSFUL (total time: 4 seconds)
[/spoiler]
Zu importieren sind: `import java.util.*;`
Die Idee ist ,wieder von vorne anzufangen (wenn sich Zeichen in der Zeichenkette geändert haben, es ein neues Teilergebnis gibt), und warum?, damit sich Buchstaben links nach dem ersten nach re verschobenen Buchstaben auch noch verschieben können.
Btw.: Der Einfachheit halber hat die Methode einen Rückgabetyp, ansammelnden Parameter und jeder Methodenaufruf die gleiche Rückgabe.
Erklärt mir trotzdem jemand das mit der nxm-Matrix (Levenshtein [nicht rekursiv])?