来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
题目描述:
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
示例 3:
输入:s = "a"
输出:"a"
示例 4:
输入:s = "ac"
输出:"a"
思路:
- 初始化左右指针,left,right.字符串长度len
- 初始化i = 0(0 <= i < len)
- 遍历字符串s,每轮初始left = i - 1(i左边的一个字符),right =i + 1(i右边的一个字符)
- while(s.charAt(left)是否等于s.charAt(i))
-- 是,left--
-- 否,跳出循环 - while(s.charAt(right)是否等于s.charAt(i))
-- 是,right++
-- 否,跳出循环 - while(s.charAt(left)是否等于s.charAt(right))
-- 是,left--,right++
-- 否,跳出循环
left与right之间的长度则是回文字符串的长度
代码实现:
class Solution {
public int start = 0;
public int maxLen = 0;
public String longestPalindrome(String s) {
if (s == null || s == "" || s.length() == 1) return s;
int len = s.length();
int left = 0, right = 0;
for (int i = 1; i < len; i++) {
left = i - 1;
right = i + 1;
while (left >= 0 && s.charAt(left) == s.charAt(i)) left--;
while (right < len && s.charAt(right) == s.charAt(i)) right++;
while (left >= 0 && right < len && s.charAt(left) == s.charAt(right)) {
left--;
right++;
}
int mark = right - left - 1;
if (mark > maxLen) {
maxLen = mark;
start = left;
}
}
return s.substring(start + 1, start + maxLen + 1);
}
}