原题
https://leetcode.cn/problems/palindrome-partitioning/description/
思路
深度优先搜索
复杂度
时间:O(n)
空间:O(n)
Python代码
class Solution:
def partition(self, s: str) -> List[List[str]]:
ans = []
def dfs(start, path):
if start == len(s):
ans.append(path[:])
return
for end in range(start, len(s)):
sub = s[start : end + 1]
if sub == sub[::-1]:
path.append(sub)
dfs(end + 1, path)
# 还原
path.pop()
dfs(0, [])
return ans
Go代码
func reverse(s string) string {
slice := []rune(s)
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
slice[i], slice[j] = slice[j], slice[i]
}
return string(slice)
}
func partition(s string) [][]string {
var ans [][]string
var dfs func(int, []string)
dfs = func(start int, path []string) {
if start == len(s) {
pathCopy := make([]string, len(path))
copy(pathCopy, path)
ans = append(ans, pathCopy)
return
}
for end := start; end < len(s); end++ {
sub := s[start : end+1]
if sub == reverse(sub) {
path = append(path, sub)
dfs(end+1, path)
// 还原
path = path[:len(path)-1]
}
}
}
dfs(0, []string{})
return ans
}
470

被折叠的 条评论
为什么被折叠?



