原题链接:
https://leetcode.com/problems/longest-palindromic-substring/description/
题意理解
我的想法是,直接从中间往两边扩展,一直到不能扩展为止。当然需要按奇数偶数来讨论一下。当然也想了一种取倒置然后找最长公共子串的做法,但是只是想了一下,因为不会做。
我的代码
class Solution {
public String longestPalindrome(String s) {
if (s.length() <= 1) {
return s;
}
char[] cs = s.toCharArray();
int maxLen = 0;
int left = 0;
int right = 0;
// 奇数的情况
for (int i = 0; i < cs.length; i++) {
int l = i;
int r = i;
while (l >= 0 && r < cs.length && cs[l] == cs[r]) {
l--;
r++;
}
int len = r - l - 1;
if (len > maxLen) {
maxLen = len;
left = l + 1;
right = r - 1;
}
}
// 偶数的情况
for (int i = 0; i < cs.length - 1; i++) {
int l = i;
int r = i + 1;
while (l >= 0 && r < cs.length && cs[l] == cs[r]) {
l--;
r++;
}
int len = r - l - 1;
if (len > maxLen) {
maxLen = len;
left = l + 1;
right = r - 1;
}
}
return s.substring(left, right + 1);
}
}
解后反思
看了别人的快代码,发现一个主要问题是,人家用了一种新的算法,但是我不会,所以先不贴这个算法及做法。