本文共 1760 字,大约阅读时间需要 5 分钟。
为了找到字符串中最长的回文子串,我们采用扩展法,从字符串的每个字符位置作为中心向外扩展,检查两侧是否对称相等。这种方法的时间复杂度为O(n^2),适用于所有长度的字符串。
回文子串是指正读和倒读都一样的子串。为了高效地找到最长回文子串,我们可以使用扩展法:
这种方法确保我们在最坏情况下也能找到最长回文子串,时间复杂度为O(n^2),适用于所有情况。
public class Solution { public String longestPalindrome(String s) { if (s.length() < 2) { return s; } int maxLen = 1; int begin = 0; int n = s.length(); for (int i = 0; i < n; i++) { // 处理奇数长度回文的情况 int left = i; int right = i; while (left - 1 >= 0 && right + 1 < n && s.charAt(left - 1) == s.charAt(right + 1)) { left--; right++; if (right - left + 1 > maxLen) { maxLen = right - left + 1; begin = left; } } // 处理偶数长度回文的情况 if (i < n - 1) { int leftEven = i; int rightEven = i + 1; while (leftEven - 1 >= 0 && rightEven + 1 < n && s.charAt(leftEven - 1) == s.charAt(rightEven + 1)) { leftEven--; rightEven++; if (rightEven - leftEven + 1 > maxLen) { maxLen = rightEven - leftEven + 1; begin = leftEven; } } } } return s.substring(begin, begin + maxLen); }}
这种方法确保了在O(n^2)时间复杂度内解决问题,适用于所有可能的输入字符串。
转载地址:http://fcwuk.baihongyu.com/