最長迴文子串(Longest Palindromic Substring)——三種時間複雜度的解法
List<Character> s_new = new ArrayList<>();
for(int i = 0;i < s.length();i++){
s_new.add('#');
s_new.add(s.charAt(i));
}
s_new.add('#');
List<Integer> Len = new ArrayList<>();
String sub = "";//最長迴文子串
int sub_midd = 0;//表示在i之前所得到的Len陣列中的最大值所在位置
int sub_side = 0;//表示以sub_midd為中心的最長迴文子串的最右端在S_new中的位置
Len.add(1);
for(int i = 1;i < s_new.size();i++){
if(i < sub_side) {//i < sub_side時,在Len[j]和sub_side - i中取最小值,省去了j的判斷
int j = 2 * sub_midd - i;
if(j >= 2 * sub_midd - sub_side && Len.get(j) <= sub_side - i){
Len.add(Len.get(j));
}
else
Len.add(sub_side - i + 1);
}
else//i >= sub_side時,從頭開始匹配
Len.add(1);
while( (i - Len.get(i) >= 0 && i + Len.get(i) < s_new.size()) && (s_new.get(i - Len.get(i)) == s_new.get(i + Len.get(i))))
Len.set(i,Len.get(i) + 1);//s_new[i]兩端開始擴充套件匹配,直到匹配失敗時停止
if(Len.get(i) >= Len.get(sub_midd)){//匹配的新迴文子串長度大於原有的長度
sub_side = Len.get(i) + i - 1;
sub_midd = i;
}
}
sub = s.substring((2*sub_midd - sub_side)/2,sub_side /2);//在s中找到最長迴文子串的位置
return sub;
相關推薦
最長迴文子串(Longest Palindromic Substring)——三種時間複雜度的解法
public String longestPalindrome(String s) { List<Character> s_new = new ArrayList<>(); for(int i = 0;i < s.length();i++){
最長迴文子串(Longest Palindromic Substring)
題目描述: 給出一個字串(假設長度最長為1000),求出它的最長迴文子串,你可以假定只有一個滿足條件的最長迴文串。 樣例 給出字串 "abcdzdcab",它的最長迴文子串為 "cdzdc"。 挑戰 O(n2) 時間複雜度的演算法是可以接受的,如果你
最長迴文子字串(Longest Palindromic Substring)
Given a string S, find thelongest palindromic substring in S. You may assume that the maximumlength ofS is 1000, and there exists one uni
leetcode演算法題—golang—最長迴文子串(題5)
題目:最長迴文子串 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba"也是一個有效答案。 示例 2: 輸入: "cbb
leetcode 5最長迴文子串(1)
第一種就是從中間開始判斷,分為兩種情況,長度為奇數還是偶數,但是時間複雜度為O(n^2),程式碼如下 char* longestPalindrome(char* s) { int low,length,high,j,k; printf("%s\n",s); length=str
LeetCode 5. 最長迴文子串(C、C++、python)
給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba" 也是一個有效答案。 示例 2: 輸入: "cbbd" 輸出: "bb
演算法題:最長迴文子串(C#實現)
給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba" 也是一個有效答案。 示例 2: 輸入: "cbbd" 輸出: "bb
LeetCode第五題:最長迴文子串(C語言)
給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: “babad” 輸出: “bab” 注意: "aba"也是一個有效答案。 示例 2: 輸入: “cbbd” 輸出: “bb” 解法一:暴力求解法 思想:
leetcode5. 最長迴文子串(動態規劃)
給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba"也是一個有效答案。 示例 2: 輸入: "cbbd" 輸出: "bb" 解題思路: 採用動態規劃的
Manacher演算法------求最長迴文子串(Java)
最長迴文子串 對於一個字串,請設計一個高效演算法,計算其中最長迴文子串的長度。 給定字串A以及它的長度n,請返回最長迴文子串的長度。 測試樣例: "abc1234321ab",12 返回:7 public class Main { public st
Manacher最長迴文子串(模板)
該演算法就是處理一個字串中的最長迴文子串,在後綴陣列中看到過相對的解法,時間複雜度可以優化到o(n),但是相對程式碼量太大,而面對迴文串演算法有相對更簡單的方法,可以很簡單的處理出來,程式碼量小,時間也
求最長迴文子串(多種解法)
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
Manachar最長迴文子串(o(n))
0. 問題定義最長迴文子串問題:給定一個字串,求它的最長迴文子串長度。如果一個字串正著讀和反著讀是一樣的,那它就是迴文串。下面是一些迴文串的例項:12321 a aba abba aaaa tattarrattat(牛津英語詞典中最長的迴文單詞)1. Brute-force
最長迴文子串(動態規劃和遞迴)
給一個字串,找出它的最長的迴文子序列的長度。例如,如果給定的序列是“BBABCBCAB”,則輸出應該是7,“BABCBAB”是在它的最長迴文子序列。 “BBBBB”和“BBCBB”也都是該字串的迴文子序列,但不是最長的。注意和最長迴文子串的區別(參考:最長迴文串)!這
Leetcode#5. Longest Palindromic Substring(最長迴文子串:二種解法)
宣告:題目解法使用c++和Python兩種,重點側重在於解題思路和如何將c++程式碼轉換為python程式碼。 本題c++採用兩種方法解答,python用到了閉包的知識。 題目 Given a string s, find the longest pali
LeetCode-5. Longest Palindromic Substring(最長迴文子串)
問題:給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。 Example 1: Input: "babad" Output: "bab" Note: "aba" is also a valid answer
leetcode5:Longest Palindromic Substring最長迴文子串
python版: class Solution: def longestPalindrome(self, s): """ :type s: str :rtype: str """ start = en
【HDU - 3068】最長迴文(Manacher演算法,馬拉車演算法求最長迴文子串)
題幹: 給出一個只由小寫英文字元a,b,c...y,z組成的字串S,求S中最長迴文串的長度. 迴文就是正反讀都是一樣的字串,如aba, abba等 Input 輸入有多組case,不超過120組,每組輸入為一行小寫英文字元a,b,c...y,z組成的字串S 兩
leetcode-5-最長迴文子串(longest palindromic substring)-java
題目及測試 package pid005; /*最長迴文子串 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba"也是一個有效答案。 示例 2: 輸入: "cbbd" 輸出:
【LeetCode】#5最長迴文子串(Longest Palindromic Substring)
【LeetCode】#5最長迴文子串(Longest Palindromic Substring) 題目描述 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。 示例 示例 1: 輸入: “babad” 輸出: “bab” 注意: “a