温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java中如何实现最长回文子串

发布时间:2021-09-22 09:27:08 来源:亿速云 阅读:244 作者:小新 栏目:编程语言

这篇文章给大家分享的是有关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中如何实现最长回文子串”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI