【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.

二、问题分析

该题求的是字符串中的最常回文子串。本质上还是字符串的遍历问题。既然是回文串,那么在求的过程中可以采用从中间往两边扩散的方法。需要注意的是在扩散之前我们需要选取中心点(分析会发现中心点中的字符是相同的)。时间复杂度为O(n2)。

三、Java AC代码

public String longestPalindrome(String s) {
		if (s == null || s.length() <= 2) {
			return s;
		}
		int min = 0, max = 0;
		char[] str = s.toCharArray();
		for (int i = 1; i < s.length(); i++) {
			int start = 0, end = 0;
			int tmp = i;
			int tmp2 = i;
			while (--tmp >= 0 && str[tmp] == str[i])
				;
			while (++tmp2 < s.length() && str[tmp2] == str[i])
				;
			start = tmp;
			end = tmp2;
			while (start >= 0 && end < s.length()) {
				if (str[start] == str[end]) {
					start--;
					end++;
				} else {
					break;
				}
			}
			start++;
			end--;
			if (end - start > max - min) {
				min = start;
				max = end;
			}
			i = tmp2 - 1;
		}
		return s.substring(min, max + 1);
	}


你可能感兴趣的:(java,LeetCode,String)