动态规划相关

动态规划:空间换时间,将计算结果暂存起来,避免重复计算。作用和工程中用 redis 做缓存有异曲同工之妙。

动态规划关键是找到初始状态状态转移方程

1,最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

我们用一个 boolean dp[l][r] 表示字符串从 l 到 r 这段是否为回文。试想如果 dp[l][r]=true,我们要判断 dp[l-1][r+1] 是否为回文,只需要判断字符串在(l-1)和(r+1)两个位置是否为相同的字符

初始状态,l=r 时,此时 dp[0][0]=true。
状态转移方程,dp[l][r]=true 并且(l-1)和(r+1)两个位置为相同的字符,此时 dp[l-1][r+1]=true

public String longestPalindrome(String s) {
        int len = s.length();
        if(s==null || len==0) return s;
        int maxLen=1,left=0,right=0;//最长回文串长度,起始点,结束点
        
        boolean [][]dp = new boolean[len][len];
        dp[0][0]=true;
        for(int r =1;r<len;r++){
            for(int l = 0;l<=r;l++){
                if(s.charAt(l)==s.charAt(r)&&(r-l<2||dp[l+1][r-1])){
                    dp[l][r]=true;
                    if(maxLen<r-l+1){
                        maxLen=r-l+1;
                        left=l;
                        right=r;
                    }
                }
            }
        }
        return s.substring(left,right+1);
    }

作者:reedfan
链接:https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zhong-xin-kuo-san-fa-he-dong-tai-gui-hua-by-reedfa/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值