二刷18-最长回文子串

自从签了个国企,就失去了拼搏的动力。因为觉得国企也挺难进,进去的人学历都不比我差,在性价比高的城市855不好吗。还稳定。主要觉得自己大城市怎样都买不起房子,干几年回到小城市又没有什么工作机会。这个国企缺点是钱少,也就互联网的一半吧,而且国企弊病,谁知道多年后你能赚的是人家的几分之几呢。
不过每一种选择都有它的长处和短处,我既然做了选择就代表我愿意忍受它 的短处。希望选择过后是洒脱,因为后悔向来无意义。
但是下周还有华为面试,还是干一干吧,毕竟也学了一段时间,躺平总觉得好像白干了,希望是我能做选择,而不是我不得不这样选择。
最后,我希望研究所能给我一个好的结果。
缺乏动力的结果是效率很低,希望华为面试那天不要太丢人。。。

最长回文子串,我脑子里第一个蹦出来的是不重复的最长子串。然后想想好像又没什么关系。那道题是hashMap,加上不断通过选最大值更新左边界(原来左边界和重复字符+1之间比较)

这个题也是三月做的可以说脑子里毫无印象。
暴力法感觉有些智障,于是看了动态规划。
关系就是:这个子串是回文串的话那么=他的左右边界字符相等&去掉左右边界也是回文串。
维护一个回文串的左右边界。左边界要小于右,画个图很清晰。
动态规划这轮用的值得是上轮填上的,以j为外层循环,这样j-1那一列一定是之前填过的。
遍历字符串啦。
每一个j都是右边界,遍历每一个以j为右边界的字符串。

 public String longestPalindrome(String s) {
        if(s.length()==1)return s;
        boolean[][] dp=new boolean[s.length()][s.length()];
        for(int i=0;i<s.length();i++){
            dp[i][i]=true;
        }
        int a=0,max=1;

        char[] ch=s.toCharArray();
        for(int j=1;j<s.length();j++){
            for(int i=0;i<j;i++){
                if(ch[i]==ch[j]){
                    if(j-i<3) {
                        dp[i][j]=true;
                    }
                    else{
                        dp[i][j]=dp[i+1][j-1];
                    }
                } else dp[i][j]=false;

                if(dp[i][j]==true){

                    if(j-i+1>max){
                        max=j-i+1;
                        a=i;
                    }
                }
            }
        }
        return s.substring(a,a+max);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值