Ein rotierter String

GaanSan

Grünschnabel
Hallo,

ich will ein Programm schreiben was auf die Kommandozeile zwei Strings (bei mir sind es String1 und String2) übergeben bekommt und prüft, ob String2 eine rotierente Version von String1 ist. Wenn ja, dass soll ein "Yes" ausgegeben werden, wenn nicht, dann ein "No". (Wenn gleich, soll "Yes")

Kleines Beispiel: Aufruf1 --> 12345 45123, dann kommt die erwartete Ausgabe "Yes"
Aufruf2 --> 12345 34521, dann kommt "No"


Wenn mir bitte jemand dabei helfen könnte, wie ich es programmieren könnte, wäre ich ihm sehr dankbar. Ich verzweifle schon seit 6 Stunden an diesem Prog. T.T

Danke fürs Lesen
Gruß Gaan
 
Guten Morgen zeig uns doch mal, was du schon hast und dann schauen wir weiter.
Wo hapert es denn? Beim Einlesen, oder beim Drehen der Zeichen?

Gruß
Gerrit
 
Drehen ist relativ einfach:

rotiert = s.substring(1) + s.substring(0,1)

Jetzt musst du nur noch so lange rotieren, bis du alle Möglichkeiten durch hast und jedesmal vergleichen, ob der rotierte String mit dem Vergleichsstring übereinstimmt.
 
... oder du schiebst die Zeichen auf einen Stack und holst sie dann wieder raus... damit ist die Reihenfolge auch gedreht. BTW. ist das dann ein reverse String und kein rotierter...

Gruß
Ollie
 
Hallo,

ist einfach mal schnell hinprogrammiert, funktioniert aber denke ich.

Code:
    public static boolean testRot(String s1, String s2) {
        if (s1.length() != s2.length())
            return false;
        for (char c1 : s1.toCharArray()) {
            boolean stop = true;
            for (char c2 : s2.toCharArray()) {
                if (c2 == c1) {
                    stop = false;
                }
            }
            if (stop)
                return false;
        }
        return true;
    }

Ciao Basti
 
Hallo,

ist es Vorgabe, dass der String in die richtige Reihenfolge gebracht werden muss?

Wenn ich dich oben richtig verstanden hab, ist es doch nur Vorgabe, dass ausgegeben wird, ob es sich um den gleichen String handelt, in dem die Zeichen einfach in einer anderen Reihenfolge stehen.

Dazu musst du den String nicht rotieren, sondern einfach nur überprüfen, ob die String gleich lang sind und die Zeichen des einen Strings sich auch im anderen String befinden.

MFG

Sascha
 
Hallo,

ist einfach mal schnell hinprogrammiert, funktioniert aber denke ich.

Code:
    public static boolean testRot(String s1, String s2) {
        if (s1.length() != s2.length())
            return false;
        for (char c1 : s1.toCharArray()) {
            boolean stop = true;
            for (char c2 : s2.toCharArray()) {
                if (c2 == c1) {
                    stop = false;
                }
            }
            if (stop)
                return false;
        }
        return true;
    }

Ciao Basti

Hi Basti,
irgendwie verstehe ich Dein Programm vielleicht auch nicht ganz richtig ...
aber wo wird denn da eigentlich gedreht (rotiert)?

mit fragenden Grüßen

Takidoso
 
Hallo,

ich habe es wohl falsch verstanden. Die Methode prüft nur ob die beiden Strings gleich lang sind und schaut für jeden Buchstaben im ersten String ob er im zweiten vorhanden ist.

Ciao Basti
 
Zurück