5. Longest Palindromic Substring

這道題常規(guī)做法,從任意位置向兩邊掃描,http://www.programcreek.com/2013/12/leetcode-solution-of-longest-palindromic-substring-java/
的解釋非常容易懂。

public class Solution {
    public String longestPalindrome(String s) {
        if (s.length() == 0) return null;
        int maxLength = 1;
        String longestPalindrome = s.substring(0, 1);
        for (int i = 0; i < s.length(); i++) {
            String temp = helper(s, i, i);
            if (temp.length() > longestPalindrome.length()) {
                longestPalindrome = temp;
            }
        }
        for (int i = 0; i < s.length(); i++) {
            String temp = helper(s, i, i + 1);
            if (temp.length() > longestPalindrome.length()) {
                longestPalindrome = temp;
            }
        }

        return longestPalindrome;
    }

    private String helper(String s, int begin, int end) {
        while (begin >= 0 && end <= s.length() - 1 && s.charAt(begin) == s.charAt(end)) {
            begin--;
            end++;
        }
//注意substring的用法,"babad"的substring(0,2)是"ba",所以這里end不用-1
        return s.substring(begin+1, end);
    }
}

第二種做法DP,思維難度也不大,狀態(tài)轉(zhuǎn)移方程:

                if (s.charAt(i) == s.charAt(j) && (j - i <= 2 || dp[i + 1][j - 1])) {
                    dp[i][j] = true;

但是做起來花了很多時(shí)間,首先要知道,這里只需要管上三角矩陣的值,因?yàn)閖>=i的。我甚至連上三角矩陣的判斷方法都想不明白。。思維遲鈍。有點(diǎn)失望。其次,i要從后往前掃,否則會(huì)出現(xiàn)一種情況,aaaa,從0到4的過程中要用到從2到3,如果i從0開始,內(nèi)層的就還沒有檢查過。

DP的復(fù)雜度也是O(n*n)。
好fin,這題搞了三小時(shí),我真覺得不可思議,就坐在這電腦前3小時(shí)。??催@dp。。第一種方法做出來之后注意力不集中了。

http://blog.csdn.net/linhuanmars/article/details/20888595

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,921評(píng)論 0 33
  • 動(dòng)態(tài)規(guī)劃(Dynamic Programming) 本文包括: 動(dòng)態(tài)規(guī)劃定義 狀態(tài)轉(zhuǎn)移方程 動(dòng)態(tài)規(guī)劃算法步驟 最長(zhǎng)...
    廖少少閱讀 3,651評(píng)論 0 18
  • LeetCode 刷題隨手記 - 第一部分 前 256 題(非會(huì)員),僅算法題,的吐槽 https://leetc...
    蕾娜漢默閱讀 18,392評(píng)論 2 36
  • 《行走》 行走在曠野中 擁抱自然 風(fēng)吹過 我明白什么是自由 行走在生活中 感受生命 人來過 我明白什么是愛 行走的...
    詩(shī)人安閱讀 238評(píng)論 3 1
  • 好幾天都沒有那么想你了,日子不就還這樣過的好好的嘛,呵呵,,,
    相逢是孤島閱讀 283評(píng)論 0 0

友情鏈接更多精彩內(nèi)容