leetcode05最長回文子串

2021-09-05 09:11:59 字數 2458 閱讀 9408

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。

輸入: 「babad」

輸出: 「bab」

注意: 「aba」 也是乙個有效答案。

看到一道題沒什麼思路,首推

,無腦暴力,寫出來再說

public string longestpalindrome(string s) 

}} return s.substring(bound[0], bound[1]);

中心法,遍歷字串,把每個字元當做中心,根據條件往兩邊擴,記錄最大值 奇數陣列好擴 「aba」 偶數陣列不好擴 「abba」,找不到中心,所以要變形

public string longestpalindrome_1(string s) 

int index = 0;

s = sb.tostring();// 變形後

for (int i = 0; i != s.length(); i++)

} /*

* substring(a,b); 擷取字串上的距離,左閉右開 [a,b) replace(rex,"要替換的值"); 替換字串中某些字元

*/return s.substring(index - res, index + res + 1).replace("#", ""); }

public int caculatelong(string s, int i) else

break;

} return res;

}

,不用對s進行操作,遍歷到i時,考慮i是回文中心(奇數) [i,i+1]的中心為回文中心分別考慮這兩種情況,得到各自的回文長度,兩者中較大的則是當前i位置能求得的最大回文長度

無需擴充套件

public string longestpalindrome_2(string s) 

int e = 0;

int start = 0;

for (int i = 0; i != s.length(); i++)

} return s.substring(start, e + 1);

}

時間複雜度為o(n2),空間複雜度為o(n^2),

public string longestpalindrome_3

(string s)if(

(i +1)

!= n && s.

charat

(i)== s.

charat

(i +1)

)}}// 陣列要從下往上填,因為dp[i][j] 根據 dp[i+1][j-1]來推

for(

int i = n -

2; i >=

0; i--)}

}}for(

int k =

0; k != n; k++)}

}return s.

substring

(start, end +1)

;}

/**

* created by huajianjin on 2019/10/17.

* 最長回文子串o(n)

*/public

class

manacher

return res;

}private

static

intmaxlcpslength

(string str)

else

break;}

// 若pos的回文長度大於當前最大右邊界,更新右邊界

if(pos + cpscnt[pos]

> rightbound)

// 若pos的回文長度大於之前求得最大回文長度,更新回文長度

if(cpscnt[pos]

> maxlength)

} maxlength--

;// string res = new string(chs).substring(maxcentre - maxlength, maxcentre + maxlength + 1).replace("#", "");

// system.out.println(res);

return maxlength;

}public

static

void

main

(string[

] args)

}

總結:對於陣列或者字串求子串的問題,注意不是子串行,這類題可以使用暴力法找到所有的子串,逐一比較,求得解,當然這種解法是不能通過oj的,複雜度太高。可以往動態規劃或者滑動視窗上面想。

leetcode 05 最長回文子串

leetcode題目鏈結 題目要求 求最長回文子串。這題 我的第一思路是 從頭對每乙個節點進行遍歷 以當前節點向兩邊擴充套件,一直記錄 更新當前的最大長度。但是 奇數,偶數回文的不確定性 的問題沒有解決 奇偶不同情況統一 如果是偶數個,傳入 個相鄰節點的下標 如果是奇數個,傳入的 個引數相同 參考部...

LeetCode05 最長回文陣列

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例2 輸入 cbbd 輸出 bb 在完成演算法的程式設計時,設計演算法是至關重要的,雖然來自數理系,但是自己在編寫演算法時還是不能設計出時間...

05最長回文子串

參考文獻 給定乙個字串s,找到s中最長的回文子串 example 輸入 babad return 輸出 bab aba 也是乙個有效答案中心擴充套件法 回文中心的兩側互為映象。因此,回文可以從他的中心展開,並且只有 2n 1 個這樣的中心 乙個元素為中心的情況有 n 個,兩個元素為中心的情況有 n ...