nyoj308 Substring(第四届河南省程序设计大赛)

    xiaoxiao2021-04-15  31

    题目308 题目信息 运行结果 本题排行 讨论区

    Substring

    时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 1 描述

    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)); } } }

    转载请注明原文地址: https://ju.6miu.com/read-671693.html

    最新回复(0)