Lihat kode terlebih dahulu
kelas publik maxhuiwen {public static void main (string [] args) {// TODO Metode yang dihasilkan secara otomatis string string S = "ABB"; Maxhuiwen (S); } // 1. Output Palindrome String public static void maxhuiwen (string s) {// penyimpanan panjang string int string = s.length (); // penyimpanan string string palindrome terpanjang maxString = ""; // Transize semua substring dari string saat ini untuk (int i = 0; i <panjang; i ++) {untuk (int j = i; j <panjang+1; j ++) {string s1 = s.substring (i, j); // Jika string saat ini adalah string palindrome dan lebih besar dari panjang maxString, ganti maxString saat ini if (huiwen (s1) && s1.length ()> maxString.length ()) {maxString = s1; } //System.out.println(s1); }} // Jika panjang maxString lebih besar dari atau sama dengan 2, itu berarti itu adalah string palindrome if (maxString.length ()> = 2) {System.out.println (maxString); } else {System.out.println ("No Palindrome String"); }} // 2. Tentukan apakah string adalah string palindrome public static boolean huiwen (string s) {boolean flag = true; panjang int = s.length (); char s1 [] = s.tochararray (); // kedepan dan sesudahnya, lintasi string dan bandingkan untuk (int i = 0, j = panjang-1; i <= j; i ++, j-) {if (s1 [i]! = S1 [j]) {flag = false; }} return flag; }}1. Penilaian Pastoral String
Tentukan apakah string adalah palindrome
Deskripsi masalah, diberi string, seperti string t = "madam"; untuk menentukan apakah string itu adalah palindrome
Metode 1: 1. Tentukan dua pointer elemen string (perhatikan bahwa Java tidak memiliki konsep pointer), int right = t.length ()-1; int kiri = 0;
2. Artinya, kiri mulai dari kiri, kanan dimulai dari kanan, dan bandingkan apakah karakter yang dirujuk sama secara berurutan. Jika mereka sama, kiri ++, kanan--; Kalau tidak, itu akan dikembalikan secara langsung, bukan latar belakang.
while (kiri <kanan) {if (t.charat (kiri)! = t.charat (kanan)) mengembalikan false; kiri ++; kanan-;} return true;Kode:
/ * * 3: * Palindrome * Masalah Deskripsi: Palindrome, Palindrome Inggris, mengacu pada string yang membaca yang sama dan terbalik, seperti Madam, I Love Me, * Metode 1: * Analisis: Gunakan dua "pointer" untuk memindai dari awal dan akhir string masing -masing. Jika nilai yang ditunjuk oleh masing -masing "pointer" sama, ini adalah palindrome*/ public boolean ispalindrome (string s) {if (s == null) return false; int kiri = 0; int right = s.length ()-1; while (kiri <kanan) {if (s.charat (kiri)! = s.charat (kanan)) mengembalikan false; Kiri ++; Kanan--; } return true; } Metode 2: String pastellar seperti "Madam". Jika Anda membalikkan semuanya, Anda masih akan mendapatkan "Nyonya" sendiri. Saat membandingkan dua string, jika mereka sama, itu adalah pastellar.
1. Menerapkan fungsi yang membalikkan string
/** Menerapkan fungsi inversi dari string*/ private string reverse (string str) {string strResult = ""; untuk (int i = str.length ()-1; i> = 0; i-) {strResult+= str.charat (i); } return Strresult; } 2. Untuk string target S, pertama -tama membalikkan TI Temp = Reverse (s), dan kemudian menilai Temp. Jika sama, itu adalah palindrome, jika tidak, itu bukan * kompleksitas waktu algoritma adalah o (n) */public boolean ispalindrome2 (string s) {string temp = reverse (s); if (s.equals (temp)) mengembalikan true; elsereturn false;}Dua: Cara Menemukan String Palindromik Maksimum untuk String yang diberikan
Misalnya, mengingat string string t = "google", cara menemukan substring palindrome terpanjang "goog"
1. Ide paling sederhana dan paling langsung adalah menemukan semua substring dari string, kemudian menentukan apakah setiap substring adalah palindrome, merekam, membandingkan dan menemukan palindrome dengan panjang maksimum. * Kompleksitas waktu algoritma adalah O (n^3)
/* * 4, Find the longest palindrome substring* Problem description: Given a string, find the longest palindrome substring among all its substrings, such as a Google string, the longest substring is goog * Analysis: *1, the simplest and most direct idea is: find all substrings of the string, then judge whether each substring is a palindrome, record, compare and find the palindrome of the maximum length* Algorithm time complexity adalah o (n^3) */ string publik longestpalindrome1 (string s) {string result = null; String tempsstring = ""; // Tentukan panjang substring palindrome terpanjang int int max = 0; // Transfer semua elemen dalam string untuk (int i = 0; i <s.length (); i ++) {// Pointer subskrip array J mulai melintasi ke depan dari string untuk (int j = s.length ()-1; j> i; j-) {// Palindrome tempstring = s.substr (i, j+1); // Jika tempsstring adalah substring palindrome dan panjangnya (j-i+1)> max if (isPalindrome (tempsstring) && (j-i+1)> max) {max = j-i+1; hasil = substring (i, j+1); }}} hasil pengembalian; }2. Ide kedua adalah menilai setiap karakter t [i] di string
Substring panjang bahkan berpusat pada t [i], t [i+1] adalah palindrome
Adalah substring panjang aneh yang berpusat di t [i] sebuah palindrome
string publik longestpalindrome2 (string t) {string result = null; // penyimpanan panjang string palindrome maksimum int max = 0; // bepergian melalui setiap karakter dan menilai substring ekstensi paritas dengan setiap karakter sebagai pusat untuk (int i = 0; i <t.length (); i ++) {// Tentukan dua pointer subskrip array, dan urutan bahkan selanjutnya berpusat pada 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 ++; } // Jika panjang substring> maks, panjang string sub-palindrom disimpan sementara sebagai string sub-palindrome terpanjang = (Pend-1)-(PSTART+1) -1 = Pend-PSTART-1 if (Pend-PSTART-1> MAX) {maks = pend-pstart-1; Hasil = Substring (PSTART+1, PEND-1+1); } // Dari I sebagai pusat, tentukan apakah urutan ganjil yang diperluas adalah string palindrome 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; hasil = substrint (t, pStart+1, pend-1+1); }} hasil pengembalian; }