腾讯2017暑期实习生编程题(第一道)

来源:互联网 发布:金丝楠木淘宝店铺 编辑:程序博客网 时间:2024/06/02 19:55

给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?

输出需要删除的字符个数。

package com.itmyhome.tencent;import static org.junit.Assert.*;import java.util.Scanner;import org.junit.Test;public class MainString {@Test/** * 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串 *,如何删除才能使得回文串最长呢? */public void test() {Scanner sc=new Scanner(System.in);long start=System.currentTimeMillis();while(sc.hasNext()){String s1=sc.next();String s2=new StringBuilder(s1).reverse().toString();System.out.println("s2= "+s2);int [][]dp=new int[s1.length()+1][s2.length()+1];for(int i=1;i<dp.length;i++){for(int j=1;j<dp[0].length;j++){dp[i][j]=s1.charAt(i-1)==s2.charAt(j-1)?dp[i-1][j-1]+1:Math.max(dp[i-1][j], dp[i][j-1]);}}long time=System.currentTimeMillis()-start;for(int k=0;k<dp.length;k++){for(int m=0;m<dp[k].length;m++){System.out.print(dp[k][m]+" ");}System.out.println();}System.out.println("程序运行所需时间为:"+time+"ms");System.out.println(s1.length()+","+dp[s1.length()][s2.length()]);System.out.println(s1.length()-dp[s1.length()][s2.length()]);    }}}


原创粉丝点击