leetcode第五題 尋求最長回文子串

2022-06-12 18:39:08 字數 1598 閱讀 8798

1.思路:

1.暴力解法:

直接遍歷,兩頭收縮。

class

solution

int maxlen=1;

int begin=0;

char chararray=s.tochararray();

for(int i=0;i)}}

return s.substring(begin,begin+maxlen);

}/*驗證是否為回文串,

從外部驗證,兩邊開始逐漸縮小

*/private

boolean validpalidrome(char chararray,int left,int

right)

left++;

right--;

}return

true

; }

}

時間複雜度:o(n^3)

空間複雜度:o(1)

##注意:回文子串的長度必須大於2

2.動態規劃解法

動態規劃思路:可以考慮將陣列頭尾相同考慮為true,不同設定為false,接下來逐級深入。

最終縮小至最中心。

將回文串轉義為二維陣列,並賦值狀態,如果不等改變狀態,如果相等繼續下一級首尾繼續。

當j-i<3或者j=i時,如果chars[i]=chars[j],則狀態為true.

時間複雜度為o(n^2),空間複雜度為o(n^2).

class

solution

int maxlen=1;

int begin=0;

/*步驟1:定義狀態

*/boolean dp=new

boolean

[len][len];

for(int i=0;i)

/*步驟二:開始遍歷

*/char chars=s.tochararray();

for(int j=1;j)

else

else

if(j-i+1>maxlen&&dp[i][j])}}

}/*substring左閉右開

*/return s.substring(begin,begin+maxlen);

}/*驗證是否為回文串,

從外部驗證,兩邊開始逐漸縮小

*/}

3.中心擴散法 

class

solution

char chararray=s.tochararray();

/*中心擴散法:時間複雜度為o(n^2),空間複雜度為o(1),不需要複雜空間

*/int end=0;

int begin=0;

for(int i=0;i)

}/*substring左閉右開

*/return s.substring(begin,end+1);

}/*驗證是否為回文串,

從外部驗證,兩邊開始逐漸縮小

*/private

int expandpalidrome(string s,int left,int

right)

return r-l-1;

}}

leetCode第五題 最長回文子串

題目 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。用例 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。輸入 cbbd 輸出 bb 本題採用動態規劃演算法進行題解,關於動態規劃可以查詢一些關於他的資料,本題目屬於比較簡易的規劃演算法,只要找到...

LeetCode第五題最長回文子串

leetcode第五題最長回文子串 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。輸入 cbbd 輸出 bb 解題思路 我們可以用動態規劃演算法來解答此題,定義乙個dp二維陣列dp i j d...

leetcode第五題 最長回文子字串

題目 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 中心擴充套件演算法 回文中心的兩側互為映象。因此,回文可以從它的中心展開,由於所含字母數為偶數的回文的中心...