Anagramm mit Strings und Methode

Bitte fange erst dann mit Code und so an, wenn Du genau verstanden hast, wie die Erkennung eines Anagrammes mit "entfernen des ersten Buchstabens aus beiden Strings" funktionieren kann!

Und wie mihe7 angedeutet hat, ist die Aussage zu Anagramm noch nicht vollständig (oder Du meinst das Richtige, aber die Aussage war noch missverständlich).
 
ja sie müssen natürlich auch die gleiche Anzahl an Buchstaben + die gleiche länge
"aaab" und "bbbba" haben die gleiche Länge und die gleiche Anzahl an Buchstaben ... aber um das abzukürzen:
Anagramm bezeichnet eine Buchstabenfolge, die aus einer anderen Buchstabenfolge allein durch Umstellung (Permutation) der Buchstaben gebildet ist.
Also jeder Buchstabe muss in genau der gleichen Anzahl in beiden Zeichenketten vorkommen.
 
Oder um es in den Worten Deiner Aufgabe zu schreiben:
Ein Anagramm einer Zeichenkette ist eine Zeichenkette mit exakt gleich vielen, identischen Zeichen in gegebenenfalls anderer Reihenfolge.
Jetzt nimm mal ein Anagram und entferne alle Vorkommen eines Buchstaben aus beiden Strings. Was kannst Du über die Länge aussagen?
 
Also zurück zur Überprüfung:

Wie kannst Du mit Stift und Zettel prüfen, ob zwei Zeichenketten ein Anagramm bilden - und dabei nutzt Du das Streichen des ersten Buchstabens in beiden Zeichenketten und die verbliebene Länge der Zeichenketten ...

Also was machst Du mit Stift und Zettel, wenn Du "abcabcabc" und "cabcabcab" gegeben hast?
 
Jetzt nimm mal ein Anagram und entferne alle Vorkommen eines Buchstaben aus beiden Strings. Was kannst Du über die Länge aussagen?
Die Länge müsste am ende sein bei beiden.
Also was machst Du mit Stift und Zettel, wenn Du "abcabcabc" und "cabcabcab" gegeben hast?
Ich gucke mir den Ersten Buchstaben an und suche ihn dann in dem Zweiten Wort und streiche ihn und das solange bis es null ist. Richtig?
 
Vermutlich nur beim Tippen das "gleich" vergessen:
Ja, wenn ein Buchstabe aus beiden Zeichenketten gestrichen wird, dann müssen beide Zeichenketten danach wieder gleich lang sein.

Aber was bedeutet das im Detail?
Bei meinem Beispiel: Du streichst erst alle a, dann alle b und dann alle c - und danach müssen dann beide Zeichenketten leer sein? Oder reicht das nicht?
 
Also im Grunde wollt ihr mich auf den Trichter bringen, das meine Methode jedes char überprüft, dieses dann, falls vorhanden, in beiden Ketten entfernt bis das ganze Null ist. Und natürlich nach jedem Schritt testet ob beide Strings noch die gleiche länge haben? Fühle mich gerade richtig dumm, weil ihr euch so mühe gebt und ich es nicht schnalle lol
 
Lass dir bitte nicht einreden von irgendjemand, dein Ansatz wäre weniger wert... :
Java:
public static boolean anagramm(String s1, String s2) {
	s1 = s1.replace(" ", "");
	s2 = s2.replace(" ", "");
	if (s1.length() != s2.length())
		return false;
	for (int i = 0; i < s1.length(); i++) {
		if (s1.replaceAll("[^" + s1.charAt(i) + "]", "").length() != s2.replaceAll("[^" + s1.charAt(i) + "]", "").length())
			return false;
	}
	return true;
}
 
Ich verstehe jetzt wie es gemeint ist, aber leider nicht wie ich das Streichen programmieren könnte. Habe auch schon in der Dokumentation für Strings geguckt welche mich aber nur noch mehr verwirrt hat
 
Java:
public static boolean anagramm( String s1, String s2) {
    String news1 = s1.replaceAll("\s", "").toLowerCase();
    String news2 = s2.replaceAll("\s", "").toLowerCase();
    if (news1.length() != news2.length()) {
    return false;
    }
soweit so gut
 
Also im Grunde wollt ihr mich auf den Trichter bringen, das meine Methode jedes char überprüft, dieses dann, falls vorhanden, in beiden Ketten entfernt bis das ganze Null ist. Und natürlich nach jedem Schritt testet ob beide Strings noch die gleiche länge haben? Fühle mich gerade richtig dumm, weil ihr euch so mühe gebt und ich es nicht schnalle lol
Jetzt scheinst Du es doch zu haben. Ich unterstreiche noch einmal zwei Punkte:
a) Nach jedem Entfernen musst du die Länge der Zeichenketten prüfen.
b) am Ende ist die erste Zeichenkette leer (und die zweite auch, so es Anagramme waren)

Das Entfernen hast Du ja schon für Leerzeichen gemacht. Also könntest Du prinzipiell das replaceAll nutzen. Hier ist die Anmerkung wichtig, dass dies nicht für alle Zeichen funktionieren wird, da ein regulärer Ausdruck erwartet wird und ein paar Zeichen haben eine besondere Bedeutung (z.B. der '.' steht für ein beliebiges Zeichen).

Somit können wir nun eine Schleife mit Abbruchbedingungen definieren. Wann gehen wir nicht in die Schleife, die den ersten Buchstaben aus der ersten Zeichenkette nimmt und aus beiden Zeichenketten entfernt? Was muss da gegeben sein?

Und was die Lösung von @abc66 angeht: Die ignorierst Du bitte einfach - er hat die gestellte Aufgabe nicht korrekt gelesen und bietet daher eine Lösung an, die eben auch nicht den Vorgaben entspricht. (Davon abgesehen ist es schlicht kontraproduktiv für Dein Verständnis, denn Du bist dicht dran es selbst gelöst zu haben. Es hat schon einen Grund, warum wir Dir nicht einfach eine fertige Lösung hinklatschen....)
 
warum wir Dir nicht einfach eine fertige Lösung hinklatschen....)
Das wäre ja auch nicht Sinn der Sache. Ich muss ja auch verstehen + anwenden können. Kann euch ja auch nicht in meiner Klausur fragen. Oder vielleicht doch? :p
Java:
public static boolean anagramm( String s1, String s2) {
    s1 = s1.replaceAll(" ", "").toLowerCase();
    s2 = s2.replaceAll(" ", "").toLowerCase();
    
    while( s1.length() == s2.length()) {
        if(charAt(s1) == charAt(s2)) {
            return s1.replaceAll(s2);
wie sieht das soweit aus?
 
Beschreib mal in Worten jeden Schritt, den Du tun willst:
Code:
so lange Länge von s1 und s2 übereinstimmen, wiederhole
    ...
 
... finde einen char der in beiden Vorhanden ist
lösche diesen
vergleiche ob s1 == s2
suche gleichen char--> entfernen--> vergleichen until s1 && s2 == 0
so grob oder
 
Du kannst s1.charAt(0) nutzen, um das erste Zeichen in s1 zu ermitteln.

Nachtrag: das ist aber nicht die Frage, die Frage ist, wie Du vorgehen willst.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben