給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。
示例 1:
輸入: "babad"
輸出: "bab"
注意: "aba" 也是乙個有效答案。
示例 2:
輸入: "cbbd"
輸出: "bb"
利用回文字串的特點:正著讀和反著讀都是一樣的,所以首先把s反轉,利用i和j控制左右邊界,不斷從s中擷取子字串,這時需要理解反轉字串中對應i和j的關係,同時從反轉字串中進行擷取,進行比較。max表示當前字串的長度,如果新的子字串長度大於max才將替換。
public static string longestpalindrome(string s) }}
} return str;
}
本以為可以痛痛快快的通過測試,沒想到居然超時了!!!!
現在對上面**進行優化,優化1:因為j是從後向前迴圈的,所以當j-i>max時,替換當前str時,直接break,因為j是不斷的變小,所以就算以後出現了回文字串,也會比當前儲存的回文字串短。優化2:當len-i< max時,應該直接返回str,因為以後的子字串長度必然沒有str的長度長。
public static string longestpalindrome(string s) }}
} return str;
}
懷著忐忑的心情,再次測試用例,這次勉強通過了。看到執行結果看到速度還是可以的。
本題還有很多方法可以實現:暴力破解、動態規劃,我這次採用的是較為簡單的思路,希望有大佬可以指出還有什麼優化方式。
力扣 5 最長回文子串
題目 和647類似 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 題解 方法一 面試題,要求最長只能一趟迴圈 中心擴散法 class solutio...
力扣題庫 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 ...