Сначала посмотрите на код
открытый класс maxhuiwen {public static void main (string [] args) {// todo с генерируемым методом Строка S = "Abb"; Maxhuiwen (ы); } // 1. Выходная строка Palindrome public static void maxhuiwen (String s) {// Хранение длины строки int length = s.length (); // хранилище самая длинная String String String MaxString = ""; // Транзизация всех подстроков текущей строки для (int i = 0; i <length; i ++) {for (int j = i; j <length+1; j ++) {string s1 = s.substring (i, j); // Если текущая строка является строкой палиндрома и больше длины максстрирования, замените текущий MaxString if (huiwen (s1) && s1.length ()> maxstring.length ()) {maxstring = s1; } //System.out.println(S1); }} // Если длина максстрирования больше или равна 2, это означает, что это строка палиндрома if (maxstring.length ()> = 2) {System.out.println (maxString); } else {System.out.println ("Нет строки палиндрома"); }} // 2. Определите, является ли строка палиндромной строкой общедоступной статической логии Huiwen (String S) {boolean flag = true; int length = s.length (); char s1 [] = s.tochararray (); // Fore и после, пройдите строку и сравните для (int i = 0, j = длина-1; i <= j; i ++, j-) {if (s1 [i]! = S1 [j]) {flag = false; }} вернуть флаг; }}1. Пасторальное суждение о струнах
Определите, является ли строка палиндром
Описание задачи с учетом строки, такой как строка t = "madam"; Чтобы определить, является ли строка палиндром
Метод 1: 1. Определите два указателя строковых элементов (обратите внимание, что Java не имеет концепции указателей), int right = t.length ()-1; int left = 0;
2. То есть влево начинается слева, справа начинается справа и сравните, равны ли упомянутые символы в последовательности. Если они равны, левый ++, справа-; В противном случае он будет возвращен напрямую, а не на фоне.
while (слева <справа) {if (t.charat (слева)!Код:
/ * * 3: * palindrome * Проблема Описание: Palindrome, английский палиндром, ссылается на строку, которая читает то же самое и обратно, как мадам, я люблю меня, * Метод 1: * Анализ: используйте два «указателя», чтобы сканировать с начала и конца строки соответственно. Если значения, указанные каждым «указателем», равны, это палиндром*/ public boolean ispalindrome (String s) {if (s == null) возвращает false; int left = 0; int right = s.length ()-1; while (слева <справа) {if (s.charat (слева)! = S.Charat (справа)) вернуть false; слева ++; верно--; } вернуть true; } Метод 2: пастеллярная строка, такая как «мадам». Если вы вспомните их всех, вы все равно получите свою собственную "мадам". При сравнении двух строк, если они равны, это пастеллярный.
1. Реализуйте функцию, которая инвертирует строки
/** Реализовать функцию инверсии строки*/ private string reverse (string str) {string strresult = ""; for (int i = str.length ()-1; i> = 0; i-) {strresult+= str.charat (i); } return strresult; } 2. Для целевой строки s сначала обратите вспять temp = reverse (s), а затем судите Temp.equals (s)/**, инвертировать строку, а затем сравните ее с исходной строкой. Если это равно, это палиндром, в противном случае это не * сложности времени алгоритма o (n) */public boolean ispalindrome2 (string s) {string temp = reverse (s); if (s.equals (temp)) вернуть true; elsereturn false;}Два: как найти максимальную палиндромическую строку для данной строки
Например, с учетом строки строки t = "Google", как найти самую длинную подстроение палиндрома "Goog"
1. Самая простая и самая прямая идея - найти все подстроки строки, а затем определить, является ли каждая подстрока палиндром, записывать, сравнить и найти палиндрома максимальной длины. * Сложность времени алгоритма составляет O (n^3)
/ * * 4, Найдите самую длинную подстроение палиндрома * Описание задачи: Учитывая строку, найдите самую длинную подстроение палиндрома среди всех его подстроков, таких как строка Google, самая длинная подстроение - анализ Goog *: * 1, самая простая и самая прямая идея: найдите все подстрадные Сложность o (n^3) */ public String longestPalindrome1 (String S) {string result = null; String tempstring = ""; // Определите длину самой длинной подстроки палиндром int max = 0; // Передача всех элементов в строке для (int i = 0; i <s.length (); i ++) {// По указатель подписания массива J начинает перемещаться вперед с строки для (int j = s.length ()-1; j> i; j-) {// Палиндром Tempstring = s.substr (i, j+1); // Если Tempstring-это подстроение палиндрома и его длина (J-I+1)> max if (ispalindrome (tempstring) && (j-i+1)> max) {max = j-i+1; Result = substring (i, j+1); }}} return result; }2. Вторая идея - судить каждого персонажа t [i] в строке
Болевая подстроение, сосредоточенное на t [i], t [i+1]-палиндром
Является нечетной подстрокой, сосредоточенной на T [i] палиндроме
public String longestPalindrome2 (String T) {string result = null; // хранение длины максимальной строки палиндрома int max = 0; // Путешествие по каждому персонажу и судите подвеску для расширения паритета с каждым символом в качестве центра для (int i = 0; i <t.length (); i ++) {// Определить два указателя индекса и даже последовательность последующей последовательности, сосредоточенную на 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 ++; } // Если длина подстроения> max, длина строки субпалиндрома временно сохраняется как самая длинная суб-палиндромная строка = (pend-1)-(pStart+1) -1 = pend-pstart-1 if (pend-pstart-1> max) {max = pend-pstart-1; Result = substring (pStart+1, pend-1+1); } // Из I в качестве центра определите, является ли расширенная нечетная последовательность строкой палиндрома 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; Результат = субстро (t, pStart+1, pend-1+1); }} return result; }