Mira el código primero
clase pública maxhuiwen {public static void main (string [] args) {// tODO método generado automático stub string s = "abb"; Maxhuiwen (s); } // 1. Salida Palindrome String public static void maxhuiwen (string s) {// almacenamiento la longitud de la cadena int long = s.length (); // almacenamiento de la cadena de cadena de palindrome más larga maxString = ""; // Transize todas las sustras de la cadena actual para (int i = 0; i <longitud; i ++) {for (int j = i; j <longitud+1; j ++) {string s1 = s.substring (i, j); // Si la cadena actual es una cadena de palíndromo y es mayor que la longitud de MaxString, reemplace la actual MaxString if (Huiwen (S1) && S1.length ()> maxString.length ()) {maxString = S1; } //System.out.println(s1); }} // Si la longitud de MaxString es mayor o igual a 2, significa que es una cadena de palindrome if (maxString.length ()> = 2) {System.out.println (maxString); } else {system.out.println ("sin cadena de palindrome"); }} // 2. Determine si la cadena es una cadena de palíndromo pública estática huiwen (cadena s) {boolean flag = true; int longitud = s.length (); char s1 [] = S.ToCarArray (); // adelante y después, atraviese la cadena y compare para (int i = 0, j = longitud-1; i <= j; i ++, j-) {if (s1 [i]! = S1 [j]) {flag = false; }} Bandera de retorno; }}1. Juicio pastoral de cuerdas
Determinar si una cadena es un palíndromo
Descripción del problema, dada una cadena, como la cadena t = "señora"; para determinar si la cadena es un palíndromo
Método 1: 1. Defina dos punteros de elementos de cadena (tenga en cuenta que Java no tiene el concepto de punteros), int right = t.length ()-1; int izquierdo = 0;
2. Es decir, la izquierda comienza desde la izquierda, la derecha comienza desde la derecha y compare si los caracteres referidos son iguales en secuencia. Si son iguales, izquierda ++, derecha--; De lo contrario, se devolverá directamente, no un telón de fondo.
while (izquierda <derecha) {if (t.charat (izquierda)! = t.charat (derecha)) return false; izquierda ++; derecha-;} return true;Código:
/ * * 3: * Palindrome * Descripción del problema: Palindrome, Palindromo inglés, se refiere a una cadena que lee lo mismo e inversamente, como Madam, I Love Me, * Método 1: * Análisis: Use dos "punteros" para escanear desde el principio y el final de la cadena respectivamente. Si los valores apuntados por cada "puntero" son iguales, este es Palindrome*/ public boolean ispalindrome (String s) {if (s == null) return false; int izquierdo = 0; int right = s.length ()-1; while (izquierda <derecha) {if (s.charat (izquierda)! = s.charat (derecha)) return false; izquierda ++; bien--; } return verdadero; } Método 2: cuerda pastelera como "señora". Si los invierte a todos, aún obtendrá su propia "señora". Al comparar las dos cuerdas, si son iguales, es pastellar.
1. Implementar una función que invertirá cadenas
/** Implementar la función de inversión de una cadena*/ private String reverse (String Str) {String strResult = ""; for (int i = str.length ()-1; i> = 0; i-) {strResult+= str.charat (i); } return strResult; } 2. Para la cadena de destino s, primero revertirlo temp = reverse (s) y luego juzgar temp.equals (s)/** Invertir la cadena y luego compararla con la cadena original. Si es igual, es palíndromo, de lo contrario no es * La complejidad del tiempo del algoritmo es o (n) */public boolean ispalindrome2 (string s) {string temp = reverse (s); if (s.equals (temp)) return true; elsereturn false;}Dos: Cómo encontrar la cadena palindrómica máxima para una cadena dada
Por ejemplo, dada la cadena de cadena t = "Google", cómo encontrar su subcadena de palindromo más larga "goog"
1. La idea más simple y directa es encontrar todas las sustras de la cadena, luego determinar si cada subcadena es un palíndromo, registrar, comparar y encontrar el palíndromo de la longitud máxima. * La complejidad del tiempo del algoritmo es o (n^3)
/ * * 4, Encuentre la subcadena de palindromo más larga * Descripción del problema: Dada una cadena, encuentre la subcadena de palindromo más larga entre todas sus subcadenas, como una cadena de Google, la subcadena más larga es Goog * Análisis: * 1, la idea más simple y más simple es: Encuentra todos los subcadres de la cadena, luego juzga si cada sustring es un palindromo, registro, comparación y hallazgo del Palindmio de la longitud * La complejidad es o (n^3) */ public String LongestPalIndrome1 (String S) {String Result = null; Cadena temptring = ""; // Defina la longitud de la subcadena de palindromo más larga int max = 0; // Transfiere todos los elementos en la cadena para (int i = 0; i <s.length (); i ++) {// El puntero del subíndice de matriz j comienza a atravesar hacia adelante desde la cadena para (int j = s.length ()-1; j> i; j-) {// el palindrome temptring = s.substr (i, j+1); // Si Temprtring es una subcadena de Palindrome y su longitud (j-i+1)> max if (ispalIndrome (temptrtring) && (j-i+1)> max) {max = j-i+1; resultado = subcadena (i, j+1); }}} Resultado de retorno; }2. La segunda idea es juzgar cada carácter t [i] en la cadena
La subcadena de longitud uniforme centrada en t [i], t [i+1] es un palíndromo
Es una subcadena de longitud extraña centrada en t [i] un palindromo
cadena pública LongestPalIndrome2 (String t) {String result = null; // almacenamiento la longitud de la cadena máxima de palindromo int max = 0; // Viaje a través de cada carácter y juzga la subcadena de extensión de paridad con cada carácter como el centro para (int i = 0; i <t.length (); i ++) {// Definir dos punteros de subíndice de matriz, y la secuencia de subsecuencias incluso centrada en i, i+1 int pStart = i; int pend = i+1; while (pstart> = 0 && pend <= (t.length ()-1) && t.charat (pstart) == t.charat (pend)) {pStart--; Pend ++; } // Si la longitud de la subcadena> max, la longitud de la cadena sub-palindromo se almacena temporalmente como la cadena sub-palindrome más larga = (pend-1)-(pstart+1) -1 = pend-pStart-1 if (pend-pStart-1> max) {max = pend-pStart-1; resultado = subcadena (PStart+1, Pend-1+1); } // Desde i como centro, determine si la secuencia impar extendida es la cadena de palindromo pStart = i-1; 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; resultado = sustrint (t, pstart+1, pend-1+1); }} Resultado de retorno; }