最長對稱子串(動態規劃解法)
阿新 • • 發佈:2019-02-01
5-12 最長對稱子串 (25分)
對給定的字串,本題要求你輸出最長對稱子串的長度。例如,給定Is PAT&TAP symmetric?
,最長對稱子串為s
PAT&TAP s
,於是你應該輸出11。
輸入格式:
輸入在一行中給出長度不超過1000的非空字串。
輸出格式:
在一行中輸出最長對稱子串的長度。
輸入樣例:
Is PAT&TAP symmetric?
輸出樣例:
11
package String; import java.util.Scanner; public class LongestPalindrome { /* * 最長迴文子串(動態規劃解決方法) * 思路:pal陣列標記位於j~i之間串是否為迴文子串 * 若判斷j~i間是否為迴文子串,需依賴於 j+1 ~ i-1間子串型別,依此類推 * 直到依賴項為x或者xy,(x,y未知)(仔細體會為什麼是這樣) * i-j<2 :用於判斷x或者xy的情況,當然不要忽略&&的短路效應 */ public static int longestPalindrome(String str){ int n=str.length(); boolean[][] pal=new boolean[n][n]; int maxLen=0; for(int i=0;i<n;i++){ for(int j=i;j>=0;j--){ if(str.charAt(i)==str.charAt(j) && (i-j<2 || pal[j+1][i-1]==true)){ pal[j][i]=true; maxLen=Math.max(maxLen, i-j+1); } } } return maxLen; } public static void main(String[] args) { // Is PAT&TAP symmetric? //result:11 Scanner in = new Scanner(System.in); String str = in.nextLine(); System.out.println(longestPalindrome(str)); } }