Schauen Sie sich zuerst den Code an
public class maxhuiwen {public static void main (String [] args) {// Todo automatisch generierte Methode Stub String s = "abb"; Maxhuiwen (s); } // 1. Ausgabe Palindrome String Public static void maxhuiwen (String s) {// Speichern Sie die Länge der String -int -Länge = S.Length (); // Speichern Sie die längste Palindrome String maxstring = ""; // alle Substrings der aktuellen Zeichenfolge für (int i = 0; i <länge; i ++) {for (int j = i; j <Länge+1; J ++) {String S1 = substring (i, j); // Wenn die aktuelle Zeichenfolge eine Palindrome -Zeichenfolge ist und größer als die Länge des MaxString ist, ersetzen Sie den aktuellen MaxString if (Huiwen (S1) && s1.length ()> maxstring.length ()) {maxstring = s1; } //System.out.println(s1); }} // Wenn die Länge des MaxString größer oder gleich 2 ist, bedeutet dies, dass es sich um eine Palindrome -String if (maxstring.length ()> = 2) {System.out.println (maxstring); } else {system.out.println ("no palindrome String"); }} // 2. Bestimmen Sie, ob die Zeichenfolge eine palindrome String öffentliche statische boolean Huiwen (String S) {boolean flag = true; int länge = s.Length (); char S1 [] = s.tarArray (); // vor und nachher, durchqueren Sie die Zeichenfolge und vergleichen Sie (int i = 0, j = Länge-1; i <= j; i ++, j-) {if (s1 [i]! = S1 [j]) {flag = false; }} Rückkehrflag; }}1. Pastorales Urteil über Strings
Stellen Sie fest, ob eine Saite ein Palindrom ist
Problembeschreibung bei einer Zeichenfolge wie String t = "Madam"; Um festzustellen, ob die Saite ein Palindrom ist
Methode 1: 1. Definieren Sie zwei String-Element-Zeiger (beachten Sie, dass Java nicht das Konzept der Zeiger hat), int right = t.Length ()-1; int links = 0;
2. Das heißt, links beginnt links, rechts beginnt von rechts und vergleichen Sie, ob die verwiesenen Zeichen in der Sequenz gleich sind. Wenn sie gleich sind, links ++, rechts--; Andernfalls wird es direkt zurückgegeben, keine Kulisse.
while (links <rechts) {if (t.charat (links)!Code:
/ * * 3: * palindrome * Problem Beschreibung: Palindrome, englischer Palindrome, bezieht sich auf eine Zeichenfolge, die das Gleiche entlang und umgekehrt liest, wie Madam, ich liebe mich, * Methode 1: * Analyse: Verwenden Sie zwei "Zeiger", um von Anfang und Ende der Zeichenfolge zu scannen. Wenn die von jedem "Zeiger" gerichteten Werte gleich sind, ist dies Palindrome*/ public boolean ispalindrome (String s) {if (s == null) return false; int links = 0; int right = S.Length ()-1; while (links <rechts) {if (s.charat (links)! = S. charat (rechts)) return false; links ++; Rechts--; } Return true; } Methode 2: Pastellar -Zeichenfolge wie "Madam". Wenn Sie sie alle umkehren, erhalten Sie immer noch seine eigene "Madam". Wenn sie die beiden Saiten vergleichen, ist es Pastellar, wenn sie gleich sind, wenn sie gleich sind.
1. Implementieren Sie eine Funktion, die Strings umdreht
/** Implementieren Sie die Inversionsfunktion einer String*/ private String Reverse (String Str) {String strresult = ""; für (int i = str.length ()-1; i> = 0; i-) {Strresult+= str.charat (i); } return Strresult; } 2. Für die Zielzeichenfolge s umkehren zuerst Temp = Reverse (s) und beurteilen Sie dann Temp.equals (s)/** die Zeichenfolge invertieren und dann mit der ursprünglichen Zeichenfolge vergleichen. Wenn es gleich ist, ist es Palindrom, sonst ist es nicht * die Algorithmus -Zeitkomplexität ist o (n) */public boolean ispalindrome2 (String s) {String temp = Reverse (s); if (S.Equals (temp)) Return True; Elsereturn Falsch;}Zwei: So finden Sie die maximale palindromische Zeichenfolge für eine bestimmte Zeichenfolge
Angesichts der String String t = "Google", wie man das längste Palindrome -Substring "Goog" findet, findet man "Google".
1. Die einfachste und direkteste Idee besteht darin, alle Substrings der Saite zu finden und dann festzustellen, ob jedes Substring ein Palindrom ist, das Palindrom der maximalen Länge aufzeichnet, vergleichen und finden. * Die Komplexität der Algorithmus ist o (n^3)
/ * * 4, finde das längste Palindrom -Substring * Problembeschreibung: Wenn eine Saite angegeben ist, finden Sie das längste Palindrom -Substring zwischen allen Substrings, wie z. Komplexität ist o (n^3) */ public String longestpalindrome1 (String s) {String result = null; String tempstring = ""; // Definieren Sie die Länge des längsten Palindrom -Substring int max = 0; // Übertragen Sie alle Elemente in der Zeichenfolge für (int i = 0; i <sength (); i ++) {// Der Array-Sendekriptionspunkt J beginnt, aus der String für (int j = slength ()-1; j> i; j-) {// der Palindrome tempstring = S. substr (i, J+1) nach vorne zu treten; // Wenn Tempstring ein Palindrom-Substring und seine Länge (j-i+1)> max if (ispalindrome (tempstring) && (j-i+1)> max) {max = j-i+1 ist; Ergebnis = Substring (i, j+1); }}} Rückgabeergebnis; }2. Die zweite Idee ist, jeden Charakter t [i] in der Saite zu beurteilen
Substring sogar Länge zentriert auf T [i], T [i+1] ist ein Palindrom
Ist ein seltsames Substring, das auf T [i] ein Palindrom zentriert ist
public String longestpalindrome2 (String t) {String result = null; // die Länge des maximalen Palindrom -Zeichens int max = 0 lagern; // durch jedes Zeichen reisen und das Paritätserweiterungs -Substring mit jedem Zeichen als Zentrum für (int i = 0; i <t.Length (); i ++) {// zwei Array -Index -Zeiger und die gleichmäßige Sequenzsequenz auf i, i+1 intart = i; int pend = i+1; while (pstart> = 0 && pend <= (T.Length ()-1) && t.charat (pstart) == T.CHARAT (pend)) {pstart--; Pend ++; } // Wenn die Länge des Substring> max, wird die Länge der Subpalindrom-Zeichenfolge vorübergehend als längste Subpalindrom String = (pend-1)-(pstart+1) -1 = pend-pstart-1 if (pend-pstart-1> max) {max = pend-pstart-1; result = substring (pstart+1, pend-1+1); } // von i als Zentrum bestimmen Sie, ob die erweiterte ungerade Sequenz die Palindrome-String pstart = i-1 ist. Pend = i+1; while (pstart> = 0 && pend <= (T.Length ()-1) && t.charat (pstart) == T.CHARAT (pend)) {pstart--; Pend ++; } if (pend-pstart-1> max) {max = pend-pstart-1; result = substrint (t, pstart+1, pend-1+1); }} Rückgabeergebnis; }