問題描述:這是leetcode的一道關於字串的題,在官方給出的題解有5種思路,分別是給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。
示例1:
輸入: 「babad」
輸出: 「bab」
注意: 「aba」 也是乙個有效答案。
示例2:
輸入: 「cbbd」
輸出: 「bb」
最長公共子串
暴力法動態規劃
中心擴充套件演算法
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...