1. 程式人生 > >LeetCode 5. 最長迴文子串()

LeetCode 5. 最長迴文子串()

題目描述

給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。

示例 1:

輸入: “babad” 輸出: “bab” 注意: "aba"也是一個有效答案。 示例 2:

輸入: “cbbd” 輸出: “bb”

思路

看到這題的時候最先想到使用暴力法,找到所有子串然後找最長的迴文子串,但是實施起來很困難,並且效率不高。在這裡使用一種叫中心擴充套件法的演算法來找回文串,這是基於迴文中心的兩側互為映象,因此可以從中心展開,只要找到所有的2n-1箇中心中心可以為1個字母或者2個字母),然後依次判斷,找到最長的迴文子串。 官方解答https://leetcode-cn.com/problems/longest-palindromic-substring/solution/

程式碼

class Solution {
public:
    string longestPalindrome(string s) {
        int max_len=0;
        int start=0;
        if(s.size()==0) return "";
        for(int i=0;i<s.size();i++)
        {
            int len1=expandFromCenter(s,i,i);
            int len2=expandFromCenter(s,i,i+1);
            int
len=(len1>len2)? len1 : len2; if(len>max_len) { max_len=len; start=i-(len-1)/2; } } return s.substr(start,max_len); } int expandFromCenter(string s,int i,int j) { int left=i,right=j; while
(left>=0 && right<s.size() && s.at(left)==s.at(right)) { left--; right++; } return right-left-1; } };