Besitzen zwei Strings identische Buchstaben, nur in anderer Reihenfolge?

Qualli

Mitglied
Hallo Leute,

Ich hab folgende Frage:

angenommen ich habe einen String, nennen wir ihn
Java:
String word = "level";
und eine Methode
Java:
public boolean consistsWord (String s "LvEel"){}
. Wie kann ich herausfinden, ob man aus String s, String word formen kann, true oder false soll am Ende herrauskommen.

"Level" und "LvEel", sollen nur Platzhalter Worte sein, man könnte also jedes beliebige Wort einsetzen und die Methode überprüft dann; ob aus
Java:
String s
,
Java:
String word
entstehen könnte.

Meine Idee war es, erstmal alle Buchstaben von
Java:
String s
und
Java:
String word
in Kleinbuchstaben zu ändern und möglichen Whitespace zu entfernen (wenn bespielsweise Wörter wie
Java:
String s "Lv Eel";
auftreten). Dann wollte ich die Länge der beiden Strings vergleichen, sind sie gleich, geht's weiter, wenn nicht wird false zurückgegeben. Soweit alles klar, aber was mach ich dann. Ich müsste ja theoretisch die einzelnen Buchstaben zählen und wenn die Anzahl bei beider Strings übereinstimmt (sprich "level" = 2*l, 2*e, 1*v --> "LvEel" = 2*l, 2*e, 1*v) wird true ausgegeben, wenn nicht false. Leider hab ich absolut keine Ahnung, wie ich das ausgeben soll geschweige denn, ob dieser Lösungsansatz der Richtige ist.

Ich sitze seit drei Wochen in einem Java-Kurs für Anfänger, somit dürfte die Lösung ja eigentlich gar nicht so schwer sein, wahrscheinlich haperts bei mir noch ein bisschen am Grundverständnis. Also wenn jemand einen leichteren Lösungsansatz findet oder mir wenigstens erklären kann, was ich hier zu tun habe, würde mir das sehr helfen.

MfG Flori
 
ob dieser Lösungsansatz der Richtige ist.
"Den" richtigen Lösungsansatz gibt es meist nicht, weil es fast immer mehrere Lösungen gibt, aber so wie beschrieben, könnte man es machen.

Du könntest auch, nach Kleinbuchstaben und Whitespace, die Buchstaben der beiden Strings sortieren und die sich daraus ergebenden Strings vergleichen.
 
"Den" richtigen Lösungsansatz gibt es meist nicht, weil es fast immer mehrere Lösungen gibt, aber so wie beschrieben, könnte man es machen.

Du könntest auch, nach Kleinbuchstaben und Whitespace, die Buchstaben der beiden Strings sortieren und die sich daraus ergebenden Strings vergleichen.


Ok gut Buchstaben zu sortieren hört sich einfacher an, als einzelne Buchstaben zu zählen und zu vergleichen.

Herauskommen müsste dann ja ein Code der folgendes macht:

An Position 0 im String word steht l ---> suche l in String s und setze l an Position 0 usw....... bis das Wort rauskommen; falls nicht dann false.

Ich bin mir grad nicht sicher charAt() gibt doch dann den Index an oder?

also
Java:
        for(int i = 0; i < word.length(); i++){
            if (sentence1.charAt(i) ......}

Aber wie finde ich dann den Buchstaben in String s und setze ihn dann an Position 0
 
Du kannst dir das Sortieren auch sparen, und stattdessen erstmal alles in Groß- ODER Kleinbuchstaben konvertieren.

Anschließend castest du den String in ein Char-Array und bildest die Summe aller Werte im Array. Enthalten beide Strings die gleichen Buchstaben in gleicher Anzahl (aber beliebiger Reihenfolge), muß die Summe in beiden Fällen gleich sein.
 
Du kannst dir das Sortieren auch sparen, und stattdessen erstmal alles in Groß- ODER Kleinbuchstaben konvertieren.

Anschließend castest du den String in ein Char-Array und bildest die Summe aller Werte im Array. Enthalten beide Strings die gleichen Buchstaben in gleicher Anzahl (aber beliebiger Reihenfolge), muß die Summe in beiden Fällen gleich sein.

Ok hab ich zwar noch nie gemacht, aber ich werd's mal versuchen 😅
 
und bildest die Summe aller Werte im Array. Enthalten beide Strings die gleichen Buchstaben in gleicher Anzahl (aber beliebiger Reihenfolge), muß die Summe in beiden Fällen gleich sein.
Die Implikation gilt aber nur in eine Richtung (ist also nur eine hinreichende Bedingung, keine notwendige). Du hast schon Recht damit, dass, wenn beide Strings diegleichen Buchstaben (egal, in welcher Reihenfolge) enthalten, dann haben sie auch beide dieselbe Summe (über die Codes der Buchstaben). Allerdings können zwei völlig unterschiedliche Strings (mit derselben Anzahl an Zeichen) auch dieselbe Summe bilden. Oder mit anderen Worten: Nur, weil die Summe dieselbe ist, müssen die Strings nicht diegleichen Buchstaben enthalten haben.
Beispiel (hypothetische ASCII-Werte): {10, 2} != {6, 6}
 
Die Implikation gilt aber nur in eine Richtung (ist also nur eine hinreichende Bedingung, keine notwendige). Du hast schon Recht damit, dass, wenn beide Strings diegleichen Buchstaben (egal, in welcher Reihenfolge) enthalten, dann haben sie auch beide dieselbe Summe (über die Codes der Buchstaben). Allerdings können zwei völlig unterschiedliche Strings (mit derselben Anzahl an Zeichen) auch dieselbe Summe bilden. Oder mit anderen Worten: Nur, weil die Summe dieselbe ist, müssen die Strings nicht diegleichen Buchstaben enthalten haben.
Beispiel (hypothetische ASCII-Werte): {10, 2} != {6, 6}


Mhhh also soll ich lieber etwas anderes ausprobieren, als den String zu casten und die Summen zu vergleichen?

war mir bei meinem Code diesbezüglich eh total unsicher, ob das überhaupt möglich ist, was ich da mache.
 
@Qualli Du hattest doch einen Lösungsansatz. Setz doch den einfach mal um (treten dabei für Dich unlösbare Probleme auf, kannst Du Dir da durchaus helfen lassen). Das hat verschiedene Vorteile, unter anderem:
  1. Es ist Dein Ansatz, den hast Du entwickelt und nicht irgendwo abgekupfert.
  2. Ggf. werden Dir mögliche Schwächen des Ansatzes klar, ansonsten kann man die auch aufzeigen. Vielleicht fallen Dir dann plötzlich auch neue, bessere/schönere Lösungsansätze ein.
  3. Sortieralgorithmen sind jetzt nicht unbedingt etwas, das man lernt, wenn man gerade mit dem Programmieren begonnen hat.
  4. Die anderen zahlreichen Möglichkeiten, die es sonst noch gibt, laufen Dir nicht davon.
 

Neue Themen


Zurück
Oben