日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

(力扣)中心扩散法求最长回文子串

發(fā)布時(shí)間:2023/12/19 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (力扣)中心扩散法求最长回文子串 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Question:

給定一個(gè)字符串,輸出其中最長(zhǎng)的回文子串。

幾種解法:

暴力枚舉:時(shí)間復(fù)雜度:O(n3)(略)
(雙層枚舉:O(n2)判斷是否為回文串:O(n))

動(dòng)態(tài)規(guī)劃:時(shí)間復(fù)雜度O(n2),空間復(fù)雜度O(n2 )運(yùn)用普遍的解法,此處耗時(shí)較久、空間較大。(略)

中心擴(kuò)散(推薦):

時(shí)間復(fù)雜度O(n2),空間復(fù)雜度O(1)
C++代碼:

class Solution { public:string longestPalindrome(string s) {if (s.size() < 2)return s;int begin = 0, maxsize = 0;int n;for (int i = 0; i < s.size() - 1; i++) {//枚舉中心位置int oddlen = expandCenter(s, i, i);//以i為中心向兩邊擴(kuò)散int evenlen = expandCenter(s, i, i + 1);//以i和i+1為中心向兩邊擴(kuò)散n = max(oddlen, evenlen);//取大的串長(zhǎng)if (n > maxsize) {maxsize = n;begin = i - (maxsize - 1) / 2;//畫圖易得串起始位置(關(guān)鍵)}}return s.substr(begin, maxsize);}int expandCenter(string& s, int right, int left) {//中心擴(kuò)散函數(shù)int i = right;int j = left;for (; i >= 0 && j <= s.size() - 1;i--,j++) {if (s[i] == s[j]) continue;else break;}return j-i+1-2; //返回當(dāng)前回文串長(zhǎng)(畫圖易得j-i+1為串長(zhǎng),)//(-2是最后跳出循環(huán)坐標(biāo)移動(dòng)的值)} };

中心擴(kuò)散:
用下標(biāo) 【i】【j】 記錄某個(gè)中心位置,將下標(biāo)向兩邊以相同速率擴(kuò)散(i - -,j ++),當(dāng)【i】!=【j】時(shí)停止擴(kuò)散。

在本題的使用思路:

枚舉每個(gè)可能的中心位置(包含子串以一個(gè)元素或兩個(gè)元素為中心位置的情況),每次枚舉調(diào)用 中心擴(kuò)散函數(shù) ,得到當(dāng)前中心位置的回文子串長(zhǎng)度,與已得到的最大回文子串長(zhǎng)度相比較、取最大值,并記錄此串的起始位置 begin,枚舉結(jié)束即可得到答案。

中心擴(kuò)散函數(shù)(expandCenter):

int expandCenter(string& s, int right, int left) {//中心擴(kuò)散函數(shù)int i = right;int j = left;for (; i >= 0 && j <= s.size() - 1;i--,j++) {if (s[i] == s[j]) continue;else break;}return j-i+1-2; //返回當(dāng)前回文串長(zhǎng)(畫圖易得j-i+1為串長(zhǎng),)//(-2是最后跳出循環(huán)坐標(biāo)移動(dòng)的值)}

總結(jié)

以上是生活随笔為你收集整理的(力扣)中心扩散法求最长回文子串的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。