java代码
public String longestPalindrome(String s) {
if (s == null || s.length() == 0) {
return "";
}
int l = 0;
int len = 1;
int maxLen = 0;
int r = 0;
int maxl = 0;
for (int i = 0; i < s.length(); i++) {
l = i - 1;
r = i + 1;
while (l >= 0 && s.charAt(l) == s.charAt(i)) {
l--;
len++;
}
while (r < s.length() && s.charAt(r) == s.charAt(i)) {
r++;
len++;
}
while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {
len += 2;
r++;
l--;
}
if (len > maxLen) {
maxLen = len;
maxl = l;
}
len = 1;
}
return s.substring(maxl + 1, maxl + 1 + maxLen);
}
C++代码
string longestPalindrome(string s) {
if (s.size() == 0) {
return "";
}
int l = 0;
int len = 1;
int maxLen = 0;
int r = 0;
int maxl = 0;
for (int i = 0; i < s.size(); i++) {
l = i - 1;
r = i + 1;
while (l >= 0 && s[l] == s[i]) {
l--;
len++;
}
while (r < s.size() && s[r] == s[i]) {
r++;
len++;
}
while (l >= 0 && r < s.size() && s[l] == s[r]) {
len += 2;
r++;
l--;
}
if (len > maxLen) {
maxLen = len;
maxl = l;
}
len = 1;
}
return s.substr(maxl+1, maxLen);
}
总结
核心就是使用中心扩散法,两边去判断是否回文,回文的条件元素相等+元素对称 java的substring(n,m) 是从n下标截取到m前一位 ,左闭右开; C++的substr(n,m) 是从n位置开始,截取m位,包含n位;
打卡完成,继续坚持!!!希望友友们监督哈