leetcode——Longest Palindromic Substring

本文探讨了一种解决寻找给定字符串中最长回文子串问题的方法。通过在字符串两端添加填充字符,将奇数和偶数对称情况统一处理,从而简化了暴力搜索过程。该算法在时间复杂度上保持在可接受范围内,适用于最大长度为1000的字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

思路:

1000之内暴力可以解决。关键就是,如何考虑aa的情况。aba这种情况,挨个字母探索就行。问题就是偶数对称的情况。

我寻找了一个办法能够将奇数和偶数的统一当做偶数处理。即:将所有字母的两边都加上一个填充字符,包括第一个字符前面和最后一个字符后面,

都填充字符。这样,S也就变成2000的数量级了,到了最后别忘了去掉填充的字符即可。暴力搜索依旧是可以的。

AC代码:

public class Longest_Palindromic_Substring {
    private int maxLen = -1;
    private int start = -1;
    private int end = -1;

    private int findLongest(char[] ss, int idx){
        int i=1;
        for(;idx+i<ss.length && idx-i>=0 && ss[idx+i]==ss[idx-i];i++);
        return i-1;
    }
    public String longestPalindrome(String s) {
        char[] ss = s.toCharArray();
        StringBuffer sb = new StringBuffer("");
        for(char c:ss){
            sb.append(' ');
            sb.append(c);
        }
        sb.append(' ');

        char[] bb = sb.toString().toCharArray();

        for(int i=1;i<bb.length-1;i++){
            int tmp = findLongest(bb,i);
            if(maxLen<tmp){
                maxLen=tmp;
                start = i-maxLen;
                end = i+maxLen;
            }
        }
        if(start==-1){
            start = 0;
            end = 0;
        }
        String sbb = sb.toString().substring(start,end+1);
        return sbb.replaceAll(" ","");
    }


    public static void main(String[] args){
        Longest_Palindromic_Substring longest_palindromic_substring = new Longest_Palindromic_Substring();
        System.out.println(longest_palindromic_substring.longestPalindrome("a"));
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值