2016-05-21 10 views
0

Als eine erste Überprüfung, da eine gültige Eingabe von der Einfügung der Zeichenfolge in sich selbst gemacht werden muss, es muss doppelt so groß sein wie die Zeichenfolge S.So finden Sie, ob ein String S in einem String aus S an einer beliebigen Position in S (nur einmal) selbst enthalten ist

Eg. Wenn S = abc, dann sollte ababca oder aabcbc für die Eingabe wie abcab, abcxa, abcabcabc True aber False zurückgeben.

Ich habe bereits versucht, die naive Art der Teilstring zu überprüfen, wenn es existiert dann schneiden Sie diesen Teil aus und überprüfen Sie, ob die verbleibende Zeichenfolge mit S übereinstimmt. Aber dies schlägt für einige Arten von Eingaben fehl.

private static void printResult(String s, String p){ 
    int x = p.indexOf(s); 

    if(x<0){ 
     System.out.println("False"); 
     return; 
    } 
    String s1=""; 
    if(p.length()>=s.length()*2){ 
     s1 = p.substring(0,x)+p.substring(x+s.length()); 
     if(s1.equals(s)){ 
      System.out.println("True"); 
     } 
     else{ 
      System.out.println("False"); 
     } 
     return; 
    } 
    System.out.println("False"); 
} 
+1

Für welche Eingänge schlägt es fehl? Zeigen Sie uns den Code und die Beispiele. –

+0

Der Testcode wurde hinzugefügt –

Antwort

3

Das erste Auftreten von s zu betrachten, mag in einigen Fällen nicht angebracht sein.

Angenommen, Ihre ursprüngliche Wort ist w=xyx (für x, y einige Wörter), dann können Sie w in sich einfügen xyXYXx (Groß die Einfügung zu zeigen) zu erzeugen. Jetzt können Sie sehen, dass, wenn Sie versuchen, xyx zu finden, Ihr Algorithmus es an der ersten Position finden wird und dann yxx als der restliche Teil produziert.

Sie müssen also jede mögliche Position vor dem Abschluss betrachten.

Verwandte Themen