leetcode 5 最长回文子串(中心扩散法)

leetcode5:给你一个字符串 s,找到 s 中最长的回文子串。

例如:输入s = "ababd",输出"bab"

        面对回文问题,可以使用中心扩散法解决。中心扩散法表示从一个字符开始,从他的两侧依次拓展。在拓展时,需要考虑奇偶问题。

奇数:"ababd", 从第三个字符"a"开始拓展。

偶数:"abb",从第二个字符"bb"开始拓展。

        所以面对奇数和偶数两种情况需要同时比较,选取其中拓展后字符数目较多的那一种情况。首先定义中心扩散计算函数,返回最长回文子串。

    public String func(int left,int right,String s){
        String temp = "";
        while(left >= 0 && right < s.length()){
            if(s.charAt(left) == s.charAt(right)){
                temp = s.substring(left,right + 1);
                left--;
                right++;
            }
            else{break;}
        }
        return temp;
    }

        其中left和right表示左右指针。如果是奇数,传入的参数是(i,i,s)。如果是偶数,传入的参数是(i,i+1,s)。比较奇数和偶数返回的回文子串的长度,选择长的那个记录下最长回文子串。

    public String longestPalindrome(String s) {
        String ans = "";
        for(int i = 0;i < s.length();i++){
            String str1 = func(i,i,s);
            String str2 = func(i,i + 1,s);
            String str3 = "";
            if (str1.length() > str2.length()){str3 = str1;}
            else{str3 = str2;}
            if(str3.length() > ans.length()){ans = str3;}
        }
        return ans;
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值