leetcode第五题字符串最大回文子串

最大回文子串

package com.wb.magic.rest.leetcode;

import cn.hutool.core.util.StrUtil;
import com.google.common.collect.Lists;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 返回字符串中最大回文子串
 * 回文子串:从前到后和从后到前一致
 */
public class ReturnText {


    public static String str="bababc";
    public static void main(String[] args) {
        System.out.println(getExtensionCenterMethod(str));
        System.out.println(DynamicProgram(str));
    }


    /**
     * 动态规划算法
     */
    public static String DynamicProgram(String str){
        int len=str.length();
        //回文字串必须大于等于2
        if(len<2){
            return str;
        }
        int maxlen=1;
        int begin=0;
        // dp[i][j] 表示 s[i..j] 是否是回文串
        boolean[][] dp=new boolean[len][len];

        //设置二维数组对角线的值为true
        for (int i = 0; i < dp.length; i++) {
            dp[i][i]=true;
        }

        char[] chars = str.toCharArray();

        //枚举字串长度
        for(int j=1;ji
            for (int i = 0; i maxlen){
                    maxlen=j-i+1;
                    begin=i;
                }

            }
        }

        return str.substring(begin,begin+maxlen);

    }




    /**
     * 中心扩展算法
     */
    public static String getExtensionCenterMethod(String str){

        //对str做判断
        if(StrUtil.isEmptyIfStr(str)){
            return "";
        }
        //要考虑中心值是奇数还是偶数,中心是一个还是两个问题
        //因为i最多只是到倒数第二个数,否则无法后退
        int start=0,end=0;
        int maxLen=0;
        for (int i = 0; i maxLen){
                maxLen=curMax;
                start=i-(maxLen-1)/2;
            }
        }

        return str.substring(start,start+maxLen);
    }



    //获得中心扩展后的长度,由中心点位置,长度,就可推断出是那个字符串
   public static int  expandAroundCenter(String str,int left,int right){
        while (left>=0&&right<=str.length()-1){
            if(str.charAt(left)==str.charAt(right)){
                left--;
                right++;
            }else {
                break;
            }
        }
        return right-left-1;
    }
}


你可能感兴趣的:(leetcode,算法,java)