其實最最簡單的演算法,也是效率最低的應該就是列舉子串,不過在這裡沒有必要拿來寫
解法一是在列舉子串上優化的
我們用[a,b]來表示子串,即從位置a到位置b的子串
假設現在我們已經知道了子串[x,y]不是回文串,那麼[x-1,y+1],[x-2,y+2]….[x-n,y+n]還有可能是回文串嗎? 當然不可能!!
所以我們的解法一就是遍歷一遍字串,然後分別計算以每個位置為中心的最長回文串的長度,最後選取其中的最大值就可以了
這樣的話,複雜度大概就是o(n^2),雖然不是很好,但比列舉子集要好太多了。
下面附上**:
#include
#include
#include
#include
using
namespace
std;
const
int max_n = 1e6 + 1;
char s[max_n];
//計算以指定位置為中心點的最長回文串
int find(int x)
return sum;
}int main()
printf("%d\n",ans);
}return
0;}
最長回文子串解法
沒咋麼過腦子,瞬間能想到的思路大概為 abcabcbb 比如這個字串 首先 宣告乙個陣列 裡面存放各種開分來的字串 切分條件是當這次迴圈的值 存在於當前的陣列中 像這樣abc bca cab abc bcb cb 最初的實現 var str 生成一些隨機字元 for var i 0 i 100000...
最長回文子串的解法
1 暴力法 最容易想到的就是暴力破解,求出每乙個子串,之後判斷是不是回文,找到最長的那個。求每乙個子串時間複雜度o n 2 判斷子串是不是回文o n 兩者是相乘關係,所以時間複雜度為o n 3 string findlongestpalindrome string s if tmp1 tmp2 j ...
最長回文子串兩種解法
刷leetcode.給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 思路 遍歷每乙個字元,以字元為中心,將字串對折,如果對應的字元相等,則可以確認該字串為回文串...