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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【LeetCode】5.最长回文子串

發布時間:2024/9/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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.最长回文子串的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。