Längstes Palindrom in einer Zeichenfolge

9

Ich habe die folgende Funktion geschrieben, um das längste Palindrom in einer Zeichenkette zu finden. Es funktioniert gut, aber es funktioniert nicht für Wörter wie "Mittag" oder "Redder". Ich fummelte herum und änderte die erste Zeile in der for -Schleife von:

%Vor%

bis

%Vor%

und jetzt funktioniert es, aber ich bin nicht klar warum . Meine Intuition ist, dass, wenn Sie ein Palindrom der ungeraden Länge überprüfen, es einen Extracharakter am Anfang haben wird (ich habe es weiß gezeichnet und das ist die Schlussfolgerung, die ich zu kam). Bin ich mit meinen Überlegungen auf dem richtigen Weg?

%Vor%

UPDATE: Nach Pauls unglaublicher Antwort , halte ich es für sinnvoll, beide Variablen aus Gründen der Übersichtlichkeit zu ändern:

%Vor%     
devdropper87 12.11.2015, 16:35
quelle

2 Antworten

4

Sie haben es rückwärts - wenn Sie die "ungeraden" Palindrome (mit Ihrem Fix) ausgeben, werden Sie feststellen, dass sie tatsächlich gerade sind.

Stellen Sie sich "Mittag" vor, beginnend am ersten "o" (links und rechts). Das passt, dann verschiebst du beide - jetzt vergleichst du das erste "n" mit dem zweiten "o". Nicht gut. Aber mit der Behebung fangen Sie an, beide "O" s zu vergleichen und dann zu beiden "n" s zu gehen.

Beispiel (mit dem var oddPal = centeredPalindrome(i-1, i); fix):

%Vor%
    
Paul Roub 12.11.2015, 17:10
quelle
0

Dies ist optimal, wenn das größte Palindrom früher gefunden wird. Sobald es gefunden ist, wird es beide Schleifen verlassen.

%Vor%     
Velu S Gautam 16.10.2017 12:29
quelle