(java)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.

Example:

Input : "babad"

Output : "bab"

Note: "aba" is also a valid answer.

Example:

Input : "cbbd"

Output : "bb"


解题思路:

我一开始的想法是构造一个List,存储回文序列的中间值,然后遍历String中的每一个字符的时候看下是否能够叠加在原来的回文序列中,不满足的话就把那个Substring拿出来跟max_string进行比较,更新max_string。后面发现这种方法实在是很麻烦,尤其是遇到哪种一串相同的字符串的时候,例如"aaaaaa"这种会很麻烦。

后面的想法就是进行一次遍历,把每一个值都当成是回文的中心,扩展开去找以其为中心的最大回文序列,这样会快很多。注意就是要分为奇数长度的和偶数长度的。


public class Solution {
    public String longestPalindrome(String s)
	{
		if (s.length() == 0)
			return "";
		String substring = s.substring(0,1);
		for(int i = 0;i<s.length()-1;i++)
		{
			//当以其为中心能够组成的最大回文序列已经<=max_string的长度时,停止遍历
			if(((s.length() - i)*2-1) <=substring.length())
				break;
			//长度为奇数的回文序列
			int lo1 = loindex(i,i,s);
			int len1 = (i-lo1)*2+1;
			//长度为偶数的回文序列
			int lo2 = loindex(i,i+1,s);
			int len2 = (i+1-lo2)*2;
			//更新max_string
			if(len1>substring.length() && len1 >=len2)
				substring = s.substring(lo1, lo1+len1);
			else if(len2>substring.length() && len2>len1)
				substring = s.substring(lo2, lo2+len2);
		}
		return substring;
	}
	public int loindex(int x1,int x2,String s)
	{
		while(x1 >= 0 && x2<s.length() && s.charAt(x1) == s.charAt(x2))
		{
			x1--;
			x2++;
		}
		return x1+1;
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值