LeetCode查找一个字符串的最长回文子串并返回该子串(中心扩展法)

比如一个字符串abcdcbe,则最长的回文子串就应该使bcdcd,即按顺序,倒序读都是一样的。
中心扩展法思路:一个子串是回文序列那么它必定是关于中心点对称的,所以只要找到了中心点,再逐一比较它的前后两个字符,相等就继续延申,不相等就退出找下一个“中心点”。
可能存在的问题:对于中间有连续的字符dcffg,像这样的字符串如果按照上述方法来找就无法找到,但bb是符合条件的,解决的办法就是将字符的左右都加上一个相同的字符‘*’,即字符串的长度变长为2n+1,最后再通过一定的判断就能截取出对应的回文序列。

class Solution {
    public String longestPalindrome(String s) {
		int len=0;
		StringBuffer temp = new StringBuffer();
		String fin="";
        if(s.length()==1){
            return s;
        }
        //将所有的字符左右都加上一个相同的字符
		for(int i=0;ilen)//如果长度大于以前的长度
					{
                       if(str[i] != '*'){//判断也是为了解决两个字符连着的问题,这只是一个发现的规律而已,当中心点不为*的时候
							fin=s.substring((i-1)/2-j/2, (i-1)/2+j/2+1);
						}
						else{//当中心点为*的时候
							fin=s.substring((i-1)/2-j/2+1, (i-1)/2+j/2+1);
						}
						len=temp2;
					}
				}
				else{//若左右不相等,则寻找下一个中心点
					break;
				}				
			}
		}
	return fin;
    }
}

你可能感兴趣的:(LT笔记)