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.
Example 1:
Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.
Example 2:
Input: "cbbd"
Output: "bb"
我的基本想法是用“对折”的方式来寻找回文串:
第一次遍历,在每个字符处对折,判断字符两侧是否对称,一旦不对称,跳到下一个字符。
第二次遍历,在每个间隙处对折,判断间隙两侧是否对称,一旦不对称,跳到下一个字符。
其中,若发现有更大的回文串,则保留。
class Solution {
public String longestPalindrome(String s) {
int len = s.length();
if(len <= 1){
return s;
}
String palin = s.substring(0,1); // 初始的最长回文串为首字符
int maxPalinLen = 1;
// 奇数长度,字符处对折
for(int i = 1; i < len-1;++i){
int j = 1;
int currentPalinLen = 1;
while(j<=i && j+i<len){
if(s.charAt(i-j) != s.charAt(j+i)){
break;
}
++j;
currentPalinLen += 2;
}
if(currentPalinLen > maxPalinLen){
maxPalinLen = currentPalinLen;
--j;
palin = s.substring(i-j,i+j+1);
}
}
// 偶数长度,间隙处对折
for(int i = 1; i < len;++i){
int j = 1; //一半长度
int currentPalinLen = 0;
while(j<=i && j+i<=len){
if(s.charAt(i-j) != s.charAt(j+i-1)){
break;
}
++j;
currentPalinLen += 2;
}
if(currentPalinLen > maxPalinLen){
maxPalinLen = currentPalinLen;
--j;
palin = s.substring(i-j,i+j);
}
}
return palin;
}
}
题目链接:
https://leetcode.com/problems/longest-palindromic-substring/description/