思路:
仅此回文子串题,指针从中心走向两端 !
如何确定指针 ?for循环遍历每个索引 !
使用for遍历每一个索引 !偶数则指针为i 和 i ,奇数则指针为i 和 i+1,最后更新最长的结果r
注意: substring()是左闭右开!
Java实现:
class Solution {
public String longestPalindrome(String s) {
String r=""; // 长度为0,便于比较!
// 左右指针,从中间向两边移动!
for(int i=0;i<s.length();i++){
String s1=find(s,i,i); // 找到以i位置为中心的回文串
String s2=find(s,i,i+1); // 找到以i和i+1位置为中心的回文串 // find有while防止空指针异常
r= r.length()>s1.length()? r:s1;
r= r.length()>s2.length()? r:s2; // 更新r结果
}
return r;
}
String find(String s,int l,int r){
// 防止空指针异常
while(l>=0 && r<s.length() && s.charAt(l)==s.charAt(r)){
l--;
r++; // 指针向两边展开
}
// 不满足while条件后会跳出,l和r回多运行一次 l-- r++ ,所以要l+1,但不用r-1,因为substring是左闭右开
return s.substring(l+1,r);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89296.html