LeetCode 0005

原题链接:

https://leetcode.com/problems/longest-palindromic-substring/description/

题意理解

我的想法是,直接从中间往两边扩展,一直到不能扩展为止。当然需要按奇数偶数来讨论一下。当然也想了一种取倒置然后找最长公共子串的做法,但是只是想了一下,因为不会做。

我的代码

class Solution {
    public String longestPalindrome(String s) {
        if (s.length() <= 1) {
            return s;
        }
        char[] cs = s.toCharArray();
        int maxLen = 0;
        int left = 0;
        int right = 0;
        // 奇数的情况
        for (int i = 0; i < cs.length; i++) {
            int l = i;
            int r = i;
            while (l >= 0 && r < cs.length && cs[l] == cs[r]) {
                l--;
                r++;
            }
            int len = r - l - 1;
            if (len > maxLen) {
                maxLen = len;
                left = l + 1;
                right = r - 1;
            }
        }
        // 偶数的情况
        for (int i = 0; i < cs.length - 1; i++) {
            int l = i;
            int r = i + 1;
            while (l >= 0 && r < cs.length && cs[l] == cs[r]) {
                l--;
                r++;
            }
            int len = r - l - 1;
            if (len > maxLen) {
                maxLen = len;
                left = l + 1;
                right = r - 1;
            }
        }
        return s.substring(left, right + 1);
    }
}

解后反思

看了别人的快代码,发现一个主要问题是,人家用了一种新的算法,但是我不会,所以先不贴这个算法及做法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值