# 原地址
https://leetcode-cn.com/problems/longest-palindromic-substring/
# 分析
- 我采用的为**画圆法**,官方称为中心**拓展算法**
- 首先回文串,如果是奇数,有一个中心,如果是偶数,那么就有两个中心
- 按照这个思路,分别找出1个中心和两个中心的全部组合
- 按照这些中心为圆心,画圆,半径逐渐增加,然后判断两边的字母是否相等
- 如果字母相等,就继续增加半径,如果不相等,就退出,找到了这个圆心中最长的回文串
- 拿到回文串后,同其他中心的回文串比较大小,找到最长的回文串
- **下面代码中,我分了两个if判断是单数中心还是双数中心,最后发现可以用一个公式合并这两个公式,所以改为了一个计算开始结束的公式**
# 代码
```java
class Solution {
public String longestPalindrome(String s) {
int start = 0, end = 0;
for (int i = 0; i < s.length(); i++) {
int len1 = check(s, i, i);
int len2 = check(s, i, i + 1);
int len = len1 > len2 ? len1 : len2;
// // 单数扩展
// if (len1 > len2) {
// if (len1 > (end - start + 1)) {
// start = i - len1 / 2;
// end = i + len1 / 2;
// }
// } else {
// // 双数扩展
// if (len2 > (end - start + 1)) {
// start = i - (len2 / 2 - 1);
// end = i + len2 / 2;
// }
// }
// 合成一个公示
if (len > (end - start + 1)) {
start = i - (len - 1) / 2;
end = i + len / 2;
}
}
return s.substring(start, end + 1);
}
private int check(String s, int i, int j) {
while (i >= 0 && j < s.length() && s.charAt(i) == s.charAt(j)) {
i--;
j++;
}
return j - i - 1;
}
}
```

5. 最长回文子串