力扣 5 最長回文子串

2021-10-09 03:26:35 字數 1347 閱讀 6604

題目:(和647類似)

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

示例 1:

輸入: "babad"

輸出: "bab"

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

示例 2:

輸入: "cbbd"

輸出: "bb"

題解:

方法一:(面試題,要求最長只能一趟迴圈)

中心擴散法:

class solution 

int start = 0, end = 0;

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

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

}public int expandaroundcenter(string s, int left, int right)

return right - left - 1;

}}public class main

}

方法二:

回文字串:是乙個正讀和反讀都一樣的字串。

暴力匹配:

根據回文子串的定義,列舉所有長度大於等於 22 的子串,依次判斷它們是否是回文;

在具體實現時,可以只針對大於「當前得到的最長回文子串長度」的子串進行「回文驗證」;

在記錄最長回文子串的時候,可以只記錄「當前子串的起始位置」和「子串長度」,不必做擷取。這一步我們放在後面的方法中實現。

package test;

class solution

int maxlen = 1;

int begin = 0;

// s.charat(i) 每次都會檢查陣列下標越界,因此先轉換成字元陣列

char chararray = s.tochararray();

// 列舉所有長度大於 1 的子串 chararray[i..j]

for (int i = 0; i < len - 1; i++) }}

return s.substring(begin, begin + maxlen);

}/**

* 驗證子串 s[left..right] 是否為回文串

*/private boolean validpalindromic(char chararray, int left, int right)

left++;

right--;

}return true;

}}public class main

}

最長回文子串 力扣5

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 利用回文字串的特點 正著讀和反著讀都是一樣的,所以首先把s反轉,利用i和j控制左右邊界,不斷從s中擷取...

力扣題庫 5 最長回文子串

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 從中心向兩端尋找,最終得到最大的字串 找單數最大,如為回文,則長度為 2 itmp 1 itmp so...

力扣5 最長回文子串(DP)

服了,一道dp寫一天,寫出來的 還巨爛 dp思路 正序串和逆序串找最長公共子串,注意需另外判斷子串是否為回文串,比如 abchkcba 這個很坑。dp陣列記錄正序串在i之前,逆序串在j之前的最長公共子串長度,公共子串以 i j 處的char作為結束的,所以當 chararr i adverse j ...