欢迎一起讨论
Geooo的个人博客:https://geooo.gitee.io/geoooblog/
题目描述
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
实例1
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
实例2
输入: "cbbd"
输出: "bb"
解题思路
利用指针思想 (建议先看代码再看解释)
- 左右端两边开始定义 i,j将String切成一段子串 ==> s.substring( i , j )
- StringBuffer 的 reverse() 方法将切割的子串反转 再toString() 和 equals() 进行比较
- 若相等则比较res的字符串,比其长则替换,短则舍弃
- continue ==> 若继续比下去得到的子串肯定比该子串短,则直接continue跳到下一次循环查看回文自串
- 若不相等则继续循环往下搜索
- 循环完return res字符串
public String longestPalindrome(String s) {
int start = 0;
int end = s.length()-1;
String res = new String("");
// i指针从 0 开始 (每次 j-- 等于 i 时 i++)
for(int i = start; i< s.length();i++){
//j指针从 String.length()-1 开始
for(int j = end; j>= i; j--){
//若 i == j 则将字符转为String substring在i == j时返回""
String temp = (i == j) ? String.valueOf( s.charAt(i) ) : s.substring(i,j);
//字符串反转
String rev = new StringBuffer(temp).reverse().toString();
//如果相等
if(temp.equals(rev)){
res = (temp.length() >= res.length()) ? temp : resSb;
//跳出循环
continue;
}
}
}
return res;
}