267 Palindrome Permutation II
from collections import Counter
class Solution:
def permuteUnique(self, iterable):
sol = ['']
for it in iterable:
next_sol = []
for prev in sol:
for i in range(0, len(prev) + 1):
next_sol.append(prev[:i] + it + prev[i:])
if i < len(prev) and prev[i] == it:
break
sol = next_sol
return sol
def generatePalindromes(self, s):
"""
:type s: str
:rtype: List[str]
"""
c = Counter(s)
mid, base = '', ''
for char, freq in c.items():
if freq % 2 == 1 and mid:
return []
elif freq % 2 == 1:
mid = char
if freq > 1:
base += char * (freq // 2)
else:
base += char * (freq // 2)
all_perms = self.permuteUnique(base)
palindrome = []
for base_perm in all_perms:
palindrome.append(base_perm+mid+base_perm[::-1])
return palindromeLast updated