2017-12-29 19 views
1

Sagen Sie, ich habe ein Palindrom s und ich werde Zeichen am Ende von s zum Spaß anhängen. Aber ich will aufhören, sobald es kein Palindrom mehr ist.Füge neue Zeichen zu einem Palindrome hinzu. Effiziente oder dynamische Möglichkeit zu überprüfen, ob die neue Zeichenfolge noch ein Palindrome ist?

Jetzt bin ich faul, also will ich nicht erneut scannen s zu bestimmen, ob es ein Palindrom jedes Mal ist, wenn ein neues Zeichen an s angehängt wird. Ich frage mich, ob es einen schnelleren Weg zur Formularisierung/Überprüfung gibt, ob das neue s ein Palindrom ist, indem ich die Tatsache nutze, dass s bereits ein Palindrom ist. Ich habe das Gefühl, dass es einen Weg gibt, diese Informationen zu nutzen, aber ich kann meinen Kopf nicht umschließen.


Ich bin auf meinem Denkprozess fest. Bis jetzt versuche ich, Dinge in Fälle zu zerlegen.

die palindrome s kann in zwei Form hat: (|__M__| ist ein Teilabschnitt von s und |__-M__| ist die Umkehrung des |__M__|)

wenn die Länge ungerade ist:

|__-M__|X|__M__|

wenn die Länge ist gerade:

|__-M__||__M__|

wenn ich jetzt anhängen das neue Zeichen c ist es eine effiziente Art und Weise

|__-M__|X|__M__|c < ---- ein Palindrom zu überprüfen?

|__-M__||__M__|c < ---- ein Palindrom?

+1

Können Sie einige Beispiele von Palindromen (von gleicher Länge, ungerader Länge oder beides) angeben, die dieses Kriterium erfüllen würden? Aus der Spitze meines Kopfes kann ich nur an Palindrome eines Zeichens denken und dieses gleiche Zeichen anhängen, z. aaa -> aaaa – Keeler

+0

@Keeler jetzt du fragst ich denke ich dachte über das Problem ..... Ich denke das einzige Mal das Palindrom bleibt ein Palindrom ist wenn alle Charaktere gleich sind und wir fügen die gleichen Zeichen hinzu. (plus die leere String-Hülle) ..... richtig? Mann, jetzt fühle ich mich töricht ...... warum verliere ich Schlaf für eine einfache Frage wie diese .... seufz –

Antwort

0

Formalisierung der gleiche Zeichen Vermutung aus den Kommentaren:

Wenn nicht alle Zeichen in der Zeichenfolge S mit N Zeichen gleich sind, da sein müssen:

  • ein Zeichen C1 bei Index P1, gefolgt von einem anderen C2 bei P1+1
  • a C1 bei dem Spiegelindex N-1-P1, von C2 vorausgegangen N-2-P1

Nach jedem einzelnen Zeichen zu S Hinzufügen jetzt muss es:

  • ein Zeichen C1 bei Index P1, gefolgt von C2 bei P1+1
  • a C1 am Spiegel Index, jetzt N-P1 wobei , vorangestellt von C2 bei N-1-P1

Also, das Zeichen bei muss sowohl C1 (vor der Erweiterung) und C2 (nach der Erweiterung) sein, die unmöglich ist, wie wir sagten, sie sind anders.

Also, nur wenn die ursprüngliche Zeichenfolge eine Wiederholung eines einzelnen Charaters ist, ist es möglich, es Zeichen für Zeichen zu erweitern und es ein Palindrom zu bleiben.

+0

Beat mich dazu, danke Ralf, Prost. – Keeler