LeetCode算法入门- Longest Palindromic Substring-day5

本文介绍LeetCode经典题目“Longest Palindromic Substring”的高效解法,采用中心扩散法,时间复杂度O(n),空间复杂度O(1)。通过实例演示如何寻找给定字符串中的最长回文子串。

LeetCode算法入门- Longest Palindromic Substring-day5

Longest Palindromic Substring

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example 1:

Input: “babad”
Output: “bab”
Note: “aba” is also a valid answer.
Example 2:

Input: “cbbd”
Output: “bb”

最便捷的方法:时间复杂度0(n),空间复杂度0(1)
使用中心扩散法:我们可以从一个中心点出发,然后慢慢向左右两边进行扩散,然后获取当前其最长字符串,最后取出最终最长的字符串。
不过这样的话就要分成两种情况:因为中心对称有两种,一种是奇数对称,一种是偶数对称

class Solution {
    String longestStr = "";
    public String longestPalindrome(String s) {
        for(int i = 0; i < s.length(); i++){
        //奇数
            helper(s,i,0);
            //偶数
            helper(s,i,1);
        }
        return longestStr;
    }
    public void helper(String s, int start, int offset){
        int left = start;
        int right = start + offset;
        while(left >= 0 && right < s.length() &&s.charAt(left) == s.charAt(right)){
            left--;
            right++;
        }
        //取当前最大字符串,substring方法:左边取,右边不取,这里left记得加1,right不变,因为上面left减了1
        String curLongest = s.substring(left + 1, right);
        if(curLongest.length() > longestStr.length())
            longestStr = curLongest;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值