LeetCode 5 Longest Palindromic Substring

题目: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.

翻译:求字符串的最长回文子串

思路:既然是求最长回文串,那么就找到每一个回文串,然后把最长的长度标记处理就好。
但是回文串会有奇数位和偶数位,所以要分情况去求最大长度。
即通过对每一个字符求最长的奇数和偶数回文串,并记录开始位置和最大长度。最后遍历结束,返回字串OK了。
	public String longestPalindrome(String s) {
        int len = s.length();
        if(len <= 1)
        	return s;
        int start = 0, maxlen = 0;
        for(int i = 1;i <len;i++)
        {
        	int low = i-1;
        	int high = i;
        	while(low>=0&& high<len &&s.charAt(low)==s.charAt(high))
        	{
        		low--;
        		high++;
        	}
        	if(high-low -2+1>maxlen)
        	{
        		maxlen = high-low-1;
        		start = low + 1;
        	}
        	
        	low = i -1;
        	high = i+1;
        	while(low>=0&&high<len&&s.charAt(low)==s.charAt(high))
        	{
        		low--;
        		high++;
        	}
        	if(high -low -1>maxlen)
        	{
        		maxlen = high - low -1;
        		start = low +1;
        	}
        	
        }
		return s.substring(start,start+maxlen);
    }

high - low -2 +1 是因为上一步结束时 low 和high分别向左右扩展了1 ,此时应该减去 2,但是求长度又需加1。
PS: 自以为Java也有C++的substr ,试了几次,才发现并没有。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值