題目:
給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。
返回 s 所有可能的分割方案。
解答:
法一:
class
solution
:def
partition
(self, s:
str)
-> list[list[
str]]:
res =
ifnot s:
return res
defbacktrack
(laststr, paths):if
len(laststr)==0
:# 如果字串沒有了,就代表分割完了:]
)return
for i in
range
(len
(laststr)):
first = laststr[
:i +1]
last = laststr[i +1:
]if first!=laststr[
:i+1][
::-1
]:continue
backtrack(last,paths)
paths.pop(
) backtrack(s,
)return res
法二:
class
solution
:def
partition
(self, s:
str)
-> list[list[
str]]:
ifnot s:
return[[
]]iflen
(s)==1:
return
[[s]
] ret =
for i in
range(1
,len
(s)+1)
:if s[
:i][::
-1]== s[
:i]:
ret +=
[[s[
:i]]
+j for j in self.partition(s[i:])
]return ret
LeetCode 每日一題131
給你乙個字串 s,請你將 s 分割成一些子串,使每個子串都是回文串。返回 s 所有可能的分割方案。回文串是正著讀和反著讀都一樣的字串。示例 1 輸入 s aab 輸出 a a b aa b 示例 2 輸入 s a 輸出 a 1 s.length 16s 僅由小寫英文本母組成class solutio...
每日一題 LeetCode
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...
LeetCode每日一題(題1028)
最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...