Java機試題:給定一個僅包含小寫字母的字串,求它的最長迴文子串的長度。
阿新 • • 發佈:2021-12-31
迴文串,指左右對稱的字串。
思路:找出字串所有的子串,迴文串既然左右對稱,則字串與字串的反轉必定相同,故可以判斷是否是迴文串。然後在所有子串中找出最大的迴文串。
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); } } privatestatic 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; } }