演算法訓練 最長回文子串(中心擴充套件演算法)

2021-10-02 19:33:30 字數 1071 閱讀 5682

問題描述:

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

示例1:

輸入: 「babad」

輸出: 「bab」

注意: 「aba」 也是乙個有效答案。

示例2:

輸入: 「cbbd」

輸出: 「bb」

這是leetcode的一道關於字串的題,在官方給出的題解有5種思路,分別是

最長公共子串

暴力法動態規劃

中心擴充套件演算法

manacher 演算法

不同的演算法的難度不同,時間複雜度也有一定的差異,這裡對「中心擴充套件演算法」做乙個簡單的介紹,下面的**有給出詳細的注釋。

public

static

void

main

(string[

] args)

public

static string centerextend

(string str)

}//其中end+1是因為substring這個方法的end引數取的是end-1

return str.

substring

(start, end+1)

;}public

static

intgetlength

(string str,

int left,

int right)

//注意:這裡兩種處理方法,第一種,在這裡寫else然後break

//第二種,在while裡面寫「 &&str.charat(left)==str.charat(right) 」

//如果沒有處理的話,不論如何都會進入while,而且會無限迴圈出不來

else

}//因為滿足最後一對字元匹配後,還將r++,l--(多移動一次),所以這裡需要-1

return right-left-1;

}}

這個演算法的時間複雜度是o(n2):由於圍繞中心來擴充套件回文會耗去 o(n)的時間,所以總的複雜度為o(n2)

中心擴散演算法 最長回文子串

這篇看一下中心擴散演算法。輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb include include include include includeusing namespace std 最長回文子串 中心擴散演算法 class soluti...

最長回文子串 動態規劃法 中心擴充套件演算法

給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為1000。嗯,回文嘛!就是順序讀取和逆序讀取的結果是一樣的,那我們可以使用兩個for迴圈來不斷的擷取給定的字串s,然後判斷擷取後的字串是不是回文串,與此同時,使用乙個新的字串result來儲存我們擷取到的並且長度最長的回文串。publi...

最長回文子串 動態規劃法 中心擴充套件演算法

給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為1000。嗯,回文嘛!就是順序讀取和逆序讀取的結果是一樣的,那我們可以使用兩個for迴圈來不斷的擷取給定的字串s,然後判斷擷取後的字串是不是回文串,與此同時,使用乙個新的字串result來儲存我們擷取到的並且長度最長的回文串。publi...