动态规划-最长回文子序列

解决方法一:

思路是找到所有的子序列判断,中间有个if(s.charAt(i)==s.charAt(j))是判断如果这个子序列的两端不相等的话就不用判断了,节省运行时间。但还是用到了两个for循环,运行提交时时间超标。这个方法有改进的话欢迎探讨。

注意小点:s.substring(i,j);是包括i不包括j即[i,j)

class Solution {

    public String longestPalindrome(String s) {

        int ans=0;

        int temp=0;

        if(s.length()==0) return s;

        if(s.length()==1) return s;

        char c=s.charAt(0);

        String anss=String.valueOf(c);

        for(int i=0;i<s.length();i++){

            for(int j=i+1;j<s.length();j++){

                if(s.charAt(i)==s.charAt(j)){

                    if(ishw(i,j,s)){

                        temp=j-i+1;

                        if(temp>ans){

                            ans=temp;

                            anss=s.substring(i,j+1);

                        }

                    }

                }

            }

        }

        return anss;

    }


    public boolean ishw(int i,int j,String s){

        if(i==j) return true;

        else if(j==i+1&&s.charAt(i)==s.charAt(j)) return true;

        else if(j==i+1&&s.charAt(i)!=s.charAt(j)) return false;

        else{

            if(s.charAt(i)==s.charAt(j)) return ishw(i+1,j-1,s);

            else return false;

        }


    }

}

方法二:只用了一重循环

思路是回文子序列必是AA或者ABA的形式

class Solution {

    public String longestPalindrome(String s) {

        int ans=0;

        if(s.length()==0) return s;

        if(s.length()==1) return s;

        int st=0;int end=0;

        for(int i=0;i<s.length();i++){

            int l1=hwnumbers(i,i,s);

            int l2=hwnumbers(i,i+1,s);

            if(l1>l2) ans=l1;

            else ans=l2;

            if(ans>end-st){

                st=i-(ans-1)/2;

                end=i+ans/2;

            }


        }

        return s.substring(st, end + 1);

    }


    public int hwnumbers(int i,int j,String s){


        while(i>=0&&j<s.length()&&s.charAt(i)==s.charAt(j)) {

            i--;

            j++;

        }

        return j-i-1;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 6,182评论 0 2
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 5,971评论 0 2
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 9,054评论 0 2
  • 贪心算法 贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上...
    fredal阅读 13,059评论 3 52
  • /*【程序21】 * 作者 南枫题目:求1+2!+3!+...+20!的和 1. 程序分析:此程序只是把累加变成了...
    HUC南枫阅读 3,229评论 0 0

友情链接更多精彩内容