給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。
示例 1:
輸入:
"babad"
輸出:"bab"
注意:"aba" 也是乙個有效答案。
示例 2:
輸入:
"cbbd"
輸出:"bb"
用動態規劃來做,列舉了三種解法
t: 156 ms m: 14.8 mb
class solution
else
}for
(int j =
3; j <= s.
size()
;++j)
}else map[i]
[j]=0;
}}return s.
substr
(start, total);}
};
在解法一的基礎上做了改進,目的是降低空間需求。
其實很明顯,奇數長度的回文串和偶數長度的回文串之間是沒有直接關聯的。也就是,已知回文串,兩邊同時擴張乙個位置才可能有依據判斷是否為回文串。這樣的性質將回文串明顯的分為奇偶兩種可能。
class solution
else
}for
(int j =
3; j <= s.
size()
;++j)
}else map[i]
[j%2]=
0;}}
return s.
substr
(start, total);}
};
將解法二再改進為只需要一維的陣列。
明顯,我們可以先做偶數長度的計算,之後,再算奇數的時候,只需要把原來的非0部分或者是更大的部分覆蓋掉就好了。
此外,這裡還使用動態分配記憶體的方式。由於每次呼叫該函式時都不需要分配這麼多的記憶體,需要的時間就會更短。
但同時對於動態分配記憶體,對於記憶體的儲存和釋放會需要更多的空間,因此空間上反而沒有更緩和。
class solution
else
}for
(int j =
4; j <= s.
size()
; j+=2
)}else map[i]=0
;}}for
(int i =
0; i < s.
size()
;++i)if(
!map[i]
) map[i]=1
;for
(int j =
3; j <= s.
size()
; j+=2
)}else map[i]=0
;}}
delete[
]map;
return s.
substr
(start, total);}
};
DP 最長回文子串
dp問題,最長回文子串 最長回文子串問題指的是在乙個字串中,是回文子串的長度的最大值.這裡的回文子串是連續的.如字串 patzjujztaccbcc 他的最長回文子串是 atzjujzta 長度為9,當然它還有其他回文子串如 ccbcc 但是長度不夠長.這類問題似乎有多種解法,複雜度從o n 3 到...
最長回文子串DP
給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 分析 dpdp j i 表示從j到i的子串 若dp j i 為回文串,則dp j 1 i 1 必然回文,...
最長回文子串 dp
給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 題目位址 回文的主要要求是 字串從中心對稱。例如 aba bb c 假設 對於乙個 字串 a?a 假定...