Longest Palindromic Substring

public class Solution {
    public String longestPalindrome(String s) {
        char[] cc=s.toCharArray();
        int[][] dp=new int[cc.length+1][cc.length+1];
        int maxlen=0;
        int maxstart=0;
        int maxend=0;
        for(int i=cc.length-1;i>=0;i--)
            for(int j=i;j<cc.length;j++)
                if(cc[i]==cc[j]&&(j-i<2||dp[i+1][j-1]==1)){
                    dp[i][j]=1;
                    if(maxlen<j-i){
                        maxstart=i;
                        maxend=j;
                        maxlen=j-i;
                    }
                }
        return s.substring(maxstart,maxend+1);
    }
}

上为仿照palindrome partition 代码版本,下为bottom up 版本速度比上面的快一倍


public String longestPalindrome(String s) {
  	    char[] cc=s.toCharArray();
  	    String res="";
  	    int maxlen=-1;
  	    for(int i=0;i<cc.length*2;i++){
  	        if(i/2-maxlen<0||i/2+maxlen>=cc.length)
  	            continue;
  	        int j=0;
  	        if(i%2==1)
  	        		j=1;
  	        for(;j<=cc.length;j=j+2){
  	            if(i-j<0||(i+j)/2>=cc.length)
  	                break;
  	            if(cc[(i-j)/2]!=cc[(i+j)/2])
  	                break;
  	            if(maxlen*2<j){
  	                maxlen=j/2;
  	                res=s.substring((i-j)/2,(i+j)/2+1);
  	            }
  	        }
  	    }
  	    return res;
  	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值