这篇文章给大家分享的是有关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中如何实现最长回文子串”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。