题目:​​原题链接​(中等)

标签:回溯算法、哈希表

解法

时间复杂度

空间复杂度

执行用时

Ans 1 (Python)

O ( 2 N )

O ( 2 N )

40ms (69.07%)

Ans 2 (Python)

Ans 3 (Python)

解法一:

# ---------- 生成所有不同的全排列(0047题) ----------
def permuteUnique(nums):
visited = set()
ans = []
now = []

n = len(nums)

def track_back():
if len(now) == n:
ans.append(now[:])
tmp_set = set()
for i in range(n):
if i not in visited:
if nums[i] in tmp_set:
continue
tmp_set.add(nums[i])

visited.add(i)
now.append(nums[i])
track_back()
now.pop()
visited.remove(i)

track_back()

return ans


class Solution:
def generatePalindromes(self, s: str) -> List[str]:
count = collections.Counter(s)

once = []
twice = []

for k, v in count.items():
n, m = divmod(v, 2)
if n:
twice.extend([k] * n)
if m:
once.append(k)

if len(once) > 1:
return []

ans = []
for lst in permuteUnique(twice):
ans.append("".join(lst + once + list(reversed(lst))))
return ans