You are given a string input. You are to find the longest substring of input such that the reversal of the substring is also a substring of input. In case of a tie, return the string that occurs earliest in input.
Note well: The substring and its reversal may overlap partially or completely. The entire original string is itself a valid substring . The best we can do is find a one character substring, so we implement the tie-breaker rule of taking the earliest one first.
输入 The first line of input gives a single integer, 1 ≤ N ≤ 10, the number of test cases. Then follow, for each test case, a line containing between 1 and 50 characters, inclusive. Each character of input will be an uppercase letter ('A'-'Z'). 输出 Output for each test case the longest substring of input such that the reversal of the substring is also a substring of input 样例输入 3 ABCABA XYZ XCVCX 样例输出 ABA X XCVCX 来源 第四届河南省程序设计大赛 上传者 张云聪我只想说这不是回文串。。
一个测试数组abvcba 答案ab
首先把原字符串翻转
把该题理解为最长公共子串,使用动态规划可以解决。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sca=new Scanner(System.in); int n=sca.nextInt(); while(n-->0){ int dp[][]=new int[55][55]; String a=sca.next(); int len=a.length(); String b=new StringBuffer(a).reverse().toString(); int res=0; int index=0; for(int i=1;i<=len;i++){ for(int j=1;j<=len;j++){ if(a.charAt(i-1)==b.charAt(j-1)){ dp[i][j]=dp[i-1][j-1]+1; } if(dp[i][j]>res){ res=dp[i][j]; index=i; } } } System.out.println(a.substring(index-res, index)); } } }