题目描述:给你一个字符串 s
,找到 s
中最长的回文子串。
解法一:中心扩散法
思想:令左右指针指向同一个元素,然后向两边扩散,并记录下最长长度 (L) 以及对应的起始位置 (index),最后返回字符串的子字符串
注意:在扩散之前,要排除所有的重复元素,从非重复元素开始扩散
例如 " cabbad " 如果不考虑到中间的 " bb " 也属于回文字符串,就可能失去正确的答案。
class Solution { public String longestPalindrome(String s) { int index = 0; int L = 0; for (int i = 0; i < s.length(); i++) { int right = i; int left = i; int count = 0;
while(right < s.length() && s.charAt(left) == s.charAt(right)){ right ++; count ++; } left--; while(left <= right && left >= 0 && right < s.length()){ if(s.charAt(left) == s.charAt(right)){ count += 2; left --; right ++; }else{ break; } } if(count > L){ L = count; index = left+1; } } return s.substring(index, index+L); } }
标签:count,index,right,charAt,05,int,回文,leetcode,left From: https://www.cnblogs.com/potato-101/p/17231808.html