【LeetCode】5.最长回文子串
生活随笔
收集整理的這篇文章主要介紹了
【LeetCode】5.最长回文子串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
5.最長回文子串
一、問題描述
給你一個字符串?s,找到?s?中最長的回文子串。
二、問題簡化
所謂回文字符串,即反過來念的字符串和正著念一樣。比如“卿卿我我卿卿”、“一二三二一”、“12321”。
回文一詞指的是漢語的一種語法,英文為palindrome。
問題可以拓展到任意類型,并且并不一定返回最長的(何況最長的可能不只一個)。
雖然單個元素也是對稱的,但是返回它并沒有意義,所以我們只返回長度大于1的回文子串。
三、功能實現
1.遍歷所有子串(從長到短,也可以反過來,看問題需求是返回最長還是最短)
2.判斷子串是否滿足回文要求(這一個功能可以單獨作為一個算法)
3.滿足要求的加入到返回值
判斷子串是否滿足回文要求:
//判斷子串是否為回文子串 template<typename T> bool IsPalindrome(const T& vec, int beg, int len) {if (len <= 1)return true;int last = beg + len - 1;while (beg < last){if (vec[beg] != vec[last])return false;++beg;--last;}return true; }遍歷所有子串,從長到短(不包含長度為1的):
template<typename T> vector<T> GetSubPalindrome(const T& vec) {vector<T> ret;int length = vec.size();for (int len = length; len > 1; --len){for (int beg = 0; beg + len < length; ++beg){if (IsPalindrome(vec, beg, len)){ret.emplace_back(vec.begin() + beg, vec.begin() + beg + len);}}}return ret; }?四、測試結果
我的代碼是最簡單的暴力算法,是O(N^3)的時間復雜度,竟然有O(N)復雜度的代碼……叫馬拉車算法,很神奇。所以我就不貼我的代碼了。
?
總結
以上是生活随笔為你收集整理的【LeetCode】5.最长回文子串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【LeetCode】4.寻找两个正序数组
- 下一篇: 【LeetCode】6.Z 字形变换