[腾讯笔试]求一个字符串删除若干字符可构成一个回文串

来源:互联网 发布:量化投资中的算法理论 编辑:程序博客网 时间:2024/06/07 08:50

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

    输入描述:    输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.    输出描述:    对于每组数据,输出一个整数,代表最少需要删除的字符个数。    输入例子:    abcda    google    输出例子:    2    2

思路:使用求最大公共子序列公式,将字符串反转,求反转字符串和原字符串的最大公共子序列,该序列不是连续的字符,构造一个二维数组,二维数组中的每个元素按照如下处理:
这里写图片描述
具体操作过程如下:
这里写图片描述
则arr[len+1][len+1]就是最大的公共子序列。


package com.java.zuichanghuiwenchuan;import java.util.Scanner;public class Main {    /*     * 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?        输出需要删除的字符个数。        输入描述:        输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.        输出描述:        对于每组数据,输出一个整数,代表最少需要删除的字符个数。        输入例子:        abcda        google        输出例子:        2        2        ================================================================        思路:        求最大子序列        用一个二维数组        restr 为 str的字符串反转                  |--0  if i=0 or j=0        a[i][j] = |--   a[i-1][j-1]+1  if str[i]=restr[j]                  |--   max{arr[i-1][j],arr[i][j-1] if str[i] != restr[j]     */    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        while(in.hasNext()){            String str = in.nextLine();            System.out.println(solution(str));        }    }    private static int solution(String str) {            String reStr = newStringBuffer(str).reverse().toString();        int len = str.length();        int[][] arr = new int[len+1][len+1];        for(int i = 0;i<len+1;i++){            arr[0][i] = arr[i][0] = 0;        }        for(int i = 1;i<len+1;i++){            for(int j = 1;j<len+1;j++){                if(str.charAt(i-1)==reStr.charAt(j-1))                    arr[i][j] = arr[i-1][j-1]+1;                else                    arr[i][j] = Math.max(arr[i][j-1],arr[i-1][j]);            }        }        return len-arr[len][len];    }}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果x耳机进水了怎么办 苹果6p进水了怎么办 华为手机声音变耳机模式怎么办 手机设置成耳机模式怎么办 opop耳机一个没有声音怎么办 oppo手机上显示耳机模式怎么办 微信显示耳机模式怎么办 微信变成耳机模式怎么办 5s变成耳机模式怎么办 华为手机一直是耳机模式怎么办 华为手机进水了耳机模式怎么办 蓝牙耳机通话声音小怎么办 华为手机自动进入耳机模式怎么办 华为手机耳机怎么挂了电话怎么办 华为手机听筒声音小怎么办 华为p9手机听筒声音小怎么办 苹果6总是耳机模式怎么办 苹果没有插耳机模式怎么办 苹果手机切换耳机模式怎么办 苹果6s出现耳机模式怎么办 苹果6变成了耳机模式怎么办 苹果手机成耳机模式了怎么办 华为mate8耳机声音小怎么办 移动sim卡丢了怎么办 蓝牙耳机开不开机怎么办 苹果手机蓝牙不匹配怎么办 苹果6蓝牙坏了怎么办 蓝牙密钥不正确不匹配怎么办 华为p6开不了机怎么办 华为c199手机不停重启怎么办 华为手机用户数据被锁定怎么办 朵唯手机丢了怎么办 网件r6220穿墙差怎么办 无线网打王者卡怎么办 酷翼x9忘了密码怎么办 楼上的路由器楼下不好使怎么办 电信4g网络不好怎么办 农村只有2g网怎么办 电信卡4g网速慢怎么办 小米手机触屏失灵怎么办 荣耀v10电信网速很慢怎么办