5. Longest Palindromic Substring最大回文子串

    int sta = 0;
    int max = 1;
    public String longestPalindrome(String s) {
        /*
        判断回文有两种:
            1.最大回文子序列求长度:
                用动态规划,dp[sta][end] 代表开头为sta、结尾为end的部分最大回文子序列的长度是多少
                dp[sta][end] = (s.charAt(sta)==s.charAt(end))?dp[sta+1][end-1]+2:max(dp[sta][end-1],dp[sta+1][end])
2.最大回文子串: 用两遍延伸法,分为两种情况,奇数子串和偶数子串: 把所有字符当做中轴,遍历一遍,每当长度超过,就更新结果
*/ int l = s.length(); if (l==0) return ""; for (int i = 0; i < l; i++) { //奇数情况 helper(s,i,i); //偶数情况 helper(s,i,i+1); } //这里注意是前闭后开区间,注意区间 return s.substring(sta,sta+max); } public void helper(String s,int left,int right){ //从中轴向两边延伸,注意最后的结果多了一次 while (left >= 0&& right < s.length()&& s.charAt(left)==s.charAt(right)) { left--; right++; } //由于left多减了一次,right多加了一次,所以处理要注意 if (max < right-left-1) { max = right-left-1; sta = left+1; } }

最大回文子序列在:http://www.cnblogs.com/stAr-1/p/7444994.html

posted @ 2018-01-01 16:53  stAr_1  阅读(137)  评论(0编辑  收藏  举报