回文串问题_动态规划

描述:

一个字符串,如果从左到右读和从右到左读是完全一样的,比如"aba",我们称其为回文串。现在给你一个字符串,可在任意位置添加字符,求最少添加几个字符,才能使其变成一个回文串。

输入格式:

任意给定的一个字符串,其长度不超过1000.

输出格式:

能变成回文串所需添加的最少字符数。

输入样例:

Ab3bd

Abb

输出样例:

2

1

import java.util.Scanner;
@SuppressWarnings("all")
public class Palindrome_string_problem {
    public static void main(String args[]){//回文串问题 动态规划
        String string = new String();//多余
        Scanner scanner = new Scanner(System.in);
        string = scanner.next();
        char []dp = string.toCharArray();
        System.out.println(changeToPalindrome(dp));
    }

    static int changeToPalindrome(char []src){
        if(src.length == 0){return 0;}
        int length = src.length;
        int i,j,len;
        int [][]dp = new int[length][length];
        for(int n = 0;n < length;n++){//初始化 在java里面多余 初始值就是0 浪费时间和复杂度
            for(int m = 0;m < length;m++){
                dp[n][m] = 0;
            }
        }

        for(len = 2;len <= length;len++){
            for(i = 0;i + len - 1 < length;i++){
                j = i + len - 1;//j 表示大于i 小于 length 之间的一个字符的位置 
                if(src[i] == src[j]){//dp[i][j]表示i到j共需要填充多少字符,当相等时就将上一层的复制这一层就行
                    dp[i][j] = dp[i + 1][j - 1];
                }
                else{
                    dp[i][j] = 1 + Math.min(dp[i + 1][j],dp[i][j - 1]);//表示向前或后添加一个字符
                }
            }
        }
        return dp[0][length - 1];
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值