PAT (Advanced Level) 1040 Longest Symmetric String(最長迴文子串)
阿新 • • 發佈:2021-08-22
1040 Longest Symmetric String (25 分)
Given a string, you are supposed to output the length of the longest symmetric sub-string. For example, givenIs PAT&TAP symmetric?
, the longest symmetric sub-string iss PAT&TAP s
, hence you must output11
.
Input Specification:
Each input file contains one test case which gives a non-empty string of length no more than 1000.
Output Specification:
For each test case, simply print the maximum length in a line.
Sample Input:
Is PAT&TAP symmetric?
結尾無空行
Sample Output:
11
結尾無空行
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String s = reader.readLine(); System.out.println(LongestSymmetricString(s).length()); } public static String LongestSymmetricString(String s){ int n = s.length(), max = 1, begin = 0; if (n < 2){ return s; } boolean[][] dp = new boolean[n][n]; for (int i = 0; i < n; i++){ dp[i][i] = true; } for (int l = 2; l <= n; l++){ for (int i = 0; i < n; i++){ int j = i + l - 1; if (j >= n) break; if (s.charAt(i) == s.charAt(j)){ if (l <= 2){ dp[i][j] = true; }else { dp[i][j] = dp[i+1][j-1]; } } if (dp[i][j] && l > max){ max = l; begin = i; } } } return s.substring(begin,begin + max); } }