1. 程式人生 > 其它 >Java機試題:給定一個僅包含小寫字母的字串,求它的最長迴文子串的長度。

Java機試題:給定一個僅包含小寫字母的字串,求它的最長迴文子串的長度。

迴文串,指左右對稱的字串。

思路:找出字串所有的子串,迴文串既然左右對稱,則字串與字串的反轉必定相同,故可以判斷是否是迴文串。然後在所有子串中找出最大的迴文串。

import java.util.*;
/*
 *  給定一個僅包含小寫字母的字串,求它的最長迴文子串的長度。
 *  所謂迴文串,指左右對稱的字串。
 */
public class Main {
    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       while(sc.hasNextLine()){
          String str 
= sc.nextLine(); // 獲取字串的中所有的子串 List<String> list = getListStr(str); StringBuffer sb = new StringBuffer(str); int maxLen = 0; for (String obj: list) { StringBuffer temp = new StringBuffer(obj); // 判斷是否是迴文子串:迴文子串反轉後與原來的相同
if(obj.equals(temp.reverse().toString())){ // 找出最大回文子串長度 if(maxLen < obj.length()){ maxLen = obj.length(); } } } System.out.println(maxLen); } } private
static List<String> getListStr(String str) { List<String> list = new ArrayList<String>(); for (int i = 0; i < str.length(); i++) { for (int j = i+1; j <= str.length(); j++) { list.add(str.substring(i,j)); } } return list; } }