这篇文章给大家分享的是有关java中如何实现最长回文子串的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
给你一个字符串
s
,找到s
中最长的回文子串。链接:https://leetcode-cn.com/problems/longest-palindromic-substring
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
示例 3:
输入:s = "a"
输出:"a"
示例 4:
输入:s = "ac"
输出:"a"
// 在评论区看到的解法,简单易懂,效率高
class Solution {
public String longestPalindrome(String s) {
if(s.length() ==1){
return s;
}
// arr保存回文的起始下标和结束下标
char[] arr = s.toCharArray();
int[] res = new int[2];
// 回文即是中间相同,左右对称的字符串,先确定中间对称的部分,再向两边扩展。
for(int i=0;i<s.length();i++){
i = funtion(arr,i,res);
}
return s.substring(res[0],res[1]+1);
}
public int funtion(char[] arr,int mid,int[] res){
int start = mid;
int end = mid;
//1 确定中间相同的部分
while(end<arr.length-1&&arr[start] == arr[end+1]){
end++;
}
//定位中间部分的最后一个字符,i 跳跃到中间相同部分的末尾。
int ans = end;
//2 从中间相同部分的边界,向两边扩展
while(start>0&&end<arr.length-1&&arr[start-1]==arr[end+1]){
start--;
end++;
}
//3 保留最长的回文
if(end-start > res[1]-res[0]){
res[0] = start;
res[1] = end;
}
// 重点:很好的提高了效率
return ans;
}
}
感谢各位的阅读!关于“java中如何实现最长回文子串”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/manner/blog/5051234