https://leetcode-cn.com/problems/longest-palindromic-substring/
最长回文串,这个题的中心扩展思想很巧妙。动态规划实在是比较难掌握,也不是那么容易写。
中心扩展法,其实就是从字符串的每一个字符开始,分别向左右去寻找合规格的字符,情况如下
如果左边的字符和当前字符相等并且下标大于0,当前字符串长度++,左边下边--,直到不符合条件。
右边同理。
接着我们再判断左手边和右手边的字符是否相等,如果相等的话我们继续往左右两边进行扩展,同时总长度+2。
如果当前长度大于最大长度,更新最大长度和开始下标。
class Solution { public String longestPalindrome(String s) { if(s == null || s.length() == 0){ return ""; } int left = 0; int right = 0; int maxLength = 0; int start = 0; int length = s.length(); int current = 1; for(int i = 0; i <length;i++){ left = i-1; right = i+1; while(left>=0 && s.charAt(left) == s.charAt(i)){ current++; left--; } while(right<length&& s.charAt(right) == s.charAt(i)){ current++; right++; } while(left>=0 && right<length && s.charAt(left) == s.charAt(right)){ current = current +2; left--; right++; } if(current>maxLength){ maxLength = current; start = left; } current = 1; } return s.substring(start+1, start+maxLength+1); } }