Longest Palindromic Substring (Java)

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

这道题可以套用Palindrome Partitioning的解题思路不过会超时,暴力也会超时。

有一种Manacher's Algorithm的算法可以将空间复杂度和时间复杂度都降到O(n),下次写注意下。

参考别人用的是时间复杂度O(n^2),空间复杂度O(1)的方法。

"aba" "abba"这两种奇偶中心不一致的情况分开讨论。从中心向两边找。

Source

    public String longestPalindrome(String s) {
        if(s.length() == 0) return s;
        
        String str = s.substring(0, 1);
        for(int i = 0; i < s.length(); i++){
        	String temp = center(s, i, i);  //奇数为中心
        	
        	if(temp.length() > str.length())
        		str = temp;
        	
        	temp = center(s, i, i + 1);		//偶数为中心
        	if(temp.length() > str.length())
        		str = temp;
        }
        return str;
    }
    
    public String center(String s, int begin, int end){  //从中心往外找
    	while(begin >= 0 && end <= s.length() - 1 && s.charAt(begin) == s.charAt(end)){
    		begin --;
    		end ++;
    	}
    	return s.substring(begin + 1, end);
    }


Test

    public static void main(String[] args){
	    String s = "abba";
	    String a = new Solution().longestPalindrome(s);
	    
	    System.out.println(a);
	    
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值