leetcode 5 最長回文子串

2022-06-05 10:18:07 字數 1055 閱讀 1187

搞暴力演算法也能搞出來,而且不大困難,這個題最主要的問題是第一次接觸了動態規劃的東西,具有一定的歷史意義。下面先貼暴力**

class

solution

if(i+k == j-k || i+k == j-k+1

) }}

}

}return

maxstring;

}};

下面是動態規劃**

class

solution

else

if(l == 1

)

else

if(db[i][j] && (l+1 >max))

}

}return

maxsize;

}};

最重要的還是寫出狀態轉移方程和邊界條件。這一題的狀態可以抽象為i,j之間的子串是否是回文子串,也就是乙個bool變數。而最關鍵的在於,如果乙個回文子串左右乙個字元相等,那麼也是回文子串,否則則不是回文串,這一點就讓我們能夠寫出最後的狀態轉移方程。邊界方程也相對好理解,如果長度為1,則一定是回文子串,若長度為2,兩個字串相等則為回文子串。這麼一抽象還是很好理解的。

下面寫下中心擴充套件演算法,這個方法其實寫暴力演算法的時候有想到過,但是沒寫出來,總的來說乙個回文子串一定有乙個中心,可以是乙個字元,也可以是兩個字元,基於這個中心進行對稱的拓展。基於這樣乙個情況,可以對所有的中心進行遍歷,然後就能夠遍歷出所有可能出現的回文情況。

貼**,這個寫了最久,nnd,小錯特別多

class

solution

cout

<1

<1

}string longestpalindrome(string

s)

else

if(end-start+1 >maxsize.length())

}return

maxsize;

}};

LeetCode5最長回文子串

給定乙個字串s,找到s中最長的回文子串。你可以假設s長度最長為1000。示例 輸入 babad 輸出 bab 注意 aba 也是有效答案示例 輸入 cbbd 輸出 bb 動態規劃來做,每個回文字串的子字串也是回文字串,即string是回文字串那麼它的string.substring 1,lenth ...

LeetCode 5 最長回文子串

問題描述 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 解決方案 中心擴充套件演算法 事實上,只需使用恆定的空間,我們就可以在 o n 2 的時間內解決這個問題...

leetcode5 最長回文子串

遞推式 1 一般 s i 1 s j 1 and j i and j i len s i 1,j 1 2 初始化dp矩陣對角線的值為 true,相鄰兩個元素相等時dp i i 1 為true 初始化回文串起始位置和長度。def longestpalindrome s n len s if s ret...