(力扣)中心扩散法求最长回文子串
生活随笔
收集整理的這篇文章主要介紹了
(力扣)中心扩散法求最长回文子串
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Question:
給定一個字符串,輸出其中最長的回文子串。
幾種解法:
暴力枚舉:時間復雜度:O(n3)(略)
(雙層枚舉:O(n2)判斷是否為回文串:O(n))
動態(tài)規(guī)劃:時間復雜度O(n2),空間復雜度O(n2 )運用普遍的解法,此處耗時較久、空間較大。(略)
中心擴散(推薦):
時間復雜度O(n2),空間復雜度O(1)
C++代碼:
中心擴散:
用下標 【i】【j】 記錄某個中心位置,將下標向兩邊以相同速率擴散(i - -,j ++),當【i】!=【j】時停止擴散。
在本題的使用思路:
枚舉每個可能的中心位置(包含子串以一個元素或兩個元素為中心位置的情況),每次枚舉調用 中心擴散函數(shù) ,得到當前中心位置的回文子串長度,與已得到的最大回文子串長度相比較、取最大值,并記錄此串的起始位置 begin,枚舉結束即可得到答案。
中心擴散函數(shù)(expandCenter):
int expandCenter(string& s, int right, int left) {//中心擴散函數(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; //返回當前回文串長(畫圖易得j-i+1為串長,)//(-2是最后跳出循環(huán)坐標移動的值)}總結
以上是生活随笔為你收集整理的(力扣)中心扩散法求最长回文子串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工行贵金属交易时间段
- 下一篇: 回溯和递归的区别(简述)