LeetCode算法入门- Longest Palindromic Substring-day5
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”
最便捷的方法:时间复杂度0(n),空间复杂度0(1)
使用中心扩散法:我们可以从一个中心点出发,然后慢慢向左右两边进行扩散,然后获取当前其最长字符串,最后取出最终最长的字符串。
不过这样的话就要分成两种情况:因为中心对称有两种,一种是奇数对称,一种是偶数对称
class Solution {
String longestStr = "";
public String longestPalindrome(String s) {
for(int i = 0; i < s.length(); i++){
//奇数
helper(s,i,0);
//偶数
helper(s,i,1);
}
return longestStr;
}
public void helper(String s, int start, int offset){
int left = start;
int right = start + offset;
while(left >= 0 && right < s.length() &&s.charAt(left) == s.charAt(right)){
left--;
right++;
}
//取当前最大字符串,substring方法:左边取,右边不取,这里left记得加1,right不变,因为上面left减了1
String curLongest = s.substring(left + 1, right);
if(curLongest.length() > longestStr.length())
longestStr = curLongest;
}
}