1. 程式人生 > >Longest Palindromic Substring(字串的最大回文子串)

Longest Palindromic Substring(字串的最大回文子串)

題目描述:
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
意思是給出一個字串s,找出其中長度最大的迴文子串。
思路:
迴文串的對稱點開始,依次向左向右比較,不相同的時候停止遍歷,直到遍歷完字串s,同時找出最大的長度的迴文子串
特別注意的是,“對稱點”有兩種可能,一種就是某個特定位置的字元,此時迴文串的長度為奇數,另一種就是兩個字元的中間位置,此時迴文串長度為偶數,需要進行特殊判斷。
(1)迴文子串長度為奇數:對稱點只有一個字元
(2)迴文子串長度為偶數:對稱點有兩個字元
時間複雜度為O(n^2): 對稱點的數量為O(n),每次查詢的時間複雜度也是O(n),所以最後的總複雜度為O(n^2)

程式碼:

/**思路:
*    迴文串的對稱點開始,依次向左向右比較,不相同的時候停止遍歷,直到遍歷完字串s,同時找出最大的長度的迴文子串
*    迴文子串長度為奇數:對稱點只有一個字元
*    迴文子串長度為偶數:對稱點有兩個字元
*/
class Solution {
public:
    string longestPalindrome(string s) {
        //字串的長度
        int len = s.size();
        if (len == 0) return s;
        //保留最長迴文串
        string resultStr = ""
; //迴文子串長度為奇數,:對稱點只有一個字元的情況 for (int i=0; i<len; ++i){ // i 為對稱點 int left = i;//左 int right = i;//右 //向左向右遍歷,直到發現不相同的時候停止 while (left > 0 && right < len - 1 && s[left - 1] == s[right + 1]){ --left; ++right; } //比較,更新最長迴文串
if (right - left + 1 > resultStr.size()){ resultStr = s.substr(left, right - left + 1); } } //迴文子串長度為偶數:對稱點有兩個字元 for (int i = 0; i < len - 1; ++i){ if (s[i] == s[i+1]){//兩個對稱點相同,才有繼續遍歷的意義 int left = i; int right = i+1; //向左向右遍歷,直到發現不相同的時候停止 while (left > 0 && right < len - 1 && s[left - 1] == s[right + 1]){ --left; ++right; } //比較,更新最長迴文串 if (right - left + 1 > resultStr.size()){ resultStr = s.substr(left, right - left + 1); } } } return resultStr; } };

相關推薦

Longest Palindromic Substring字串

題目描述: Given a string S, find the longest palindromic substring in S. You may assume that the maximum

5. Longest Palindromic Substring長迴字串

Given a string s, find the longest palindromic substring in s. You may assume that the maximum leng

5. Longest Palindromic Substring

判斷 long 由於 多少 com 開頭 longest gpo post int sta = 0; int max = 1; public String longestPalindrome(String s) { /*

Manacher演算法

這個知識點我第一天聽時,完全不懂,後來慢慢的看一個pdf文件和請教一個學長才有點懂得,到今天我繼續看一篇部落格,才對最大回文子串有清晰的理解,所以上面有什麼不對的請給位積極指出。 求最大回文子串,我個人覺得其實就是一種想法(它用到了動態規劃的思想),還不算一種單獨的演算法。

編程之法:面試和算法心得

高效 pre 記錄 特殊字符 一段 stp ace 分開 枚舉 內容全部來自編程之法:面試和算法心得一書,實現是自己寫的使用的是java 題目描述 給定一個字符串,求它的最長回文子串的長度。 分析與解法 最容易想到的辦法是枚舉所有的子串,分別判斷其是否為回文。這個思路初看起

hdu-3294

pre har solution mes pos 最長 chan ret 最長回文子串 題意:給你一個字符和一個字符串讓你求出最長回文子串並且輸出來,答案需要根據給出的字符轉換一下,就是將給出的字符認定為a,然後依次向後推; 解題思路:manacher模板+一些處理 代碼:

序列&

最大回文子序列,例如cafgfkc,最大回文子序列cfgfc,輸出5。子序列相當於刪除某些位置上的字元後形成的序列。 最大回文子串,例如cafgfkc,最大回文子串fgf,輸出3。子串相當於擷取start位到end位的子串。 試過沒認真看題目,原題是求子序列,想當然以為求子串,直接高高

5. 最長迴文子串給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。示例 1:輸入: "babad" 輸出: "bab" 注意: "aba"也是一個有效答案。 示例 2

Longest Palindromic Substring 字串

Longest Palindromic Substring (LPS) 問題是一個DP中的經典問題。處理這個問題的第一個關鍵點在於要區分substring和subsequence(我就犯了這樣的錯誤)。substring指的是連續的子字串,比如abc是abcde的subst

[Leetcode] Longest palindromic substring

最長回文子串 lee ++ string lin find bsp 解決方法 相同 Given a string S, find the longest palindromic substring in S. You may assume that the maximum

5. Longest Palindromic Substring( manacher 算法)

substr val pro 三元 rep manacher bstr ins return Given a string s, find the longest palindromic substring in s. You may assume that the max

LeetCode-5. Longest Palindromic Substring長迴

問題:給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。 Example 1: Input: "babad" Output: "bab" Note: "aba" is also a valid answer

cf#516C. Oh Those Palindromes字串排列方式,字典序

http://codeforces.com/contest/1064/problem/C 題意:給出一個字串,要求重新排列這個字串,是他的迴文子串數量最多並輸出這個字串。 題解:字典序排列的字串迴文子串最多。 1 #include<bits/stdc++.h> 2 using n

LeetCode:128. Longest Consecutive Sequence找出的連續

Given an unsorted array of integers, find the length of the longest consecutive elements sequence. Your algorithm should run in O(n) complexity. E

【51NOD-0】1089 V2Manacher算法

lose 最長回文子串 gif () none print struct hide pac 【算法】回文樹 #include<cstdio> #include<algorithm> #include<cstring> using na

51nod 1089 V2Manacher算法

clu 記得 file 越界 str tool algorithm scanf ++i 1089 最長回文子串 V2(Manacher算法) 基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題 收藏 關註

LPS序列

轉化 最長回文 反轉 may substring 子串 def 平均情況 put Given a string s, find the longest palindromic substring in s. You may assume that the maximum l

,On復雜度

16px 2個 ida strip 問題 們的 repo 紅色 rep 最長回文子串問題—Manacher算法 最長回文串問題是一個經典的算法題。 0.

題目:C++

ptr 這位 優化 png 技術分享 ring tdi xen 回文 看到這個題第一反應是做過啊,然後就開始寫,等寫完一測。emmmmm,原來是最長回文子串不是最長回文子序列,但是寫都寫了,我就把代碼稍微修改了一下讓適應於該題目,代碼如下: static const au

51Nod1089 V2Manacher算法

維護 ora div text clas i++ 情況 超出 手動 俗稱馬拉車算法→_→ 處理最長回文字串復雜度O(n) 這裏菜雞不會證,簡單說一下思路。 由於回文串有奇有偶,所以將串之間和兩邊加上‘#‘,為了防止後面某個地方超邊