I see a couple of these on codereview but I was hoping my way hasn't yet been encountered:
def is_palindrome_permutation(strng):
cache = set()
for char in strng.lower():
if not char.isalpha():
continue
if char in cache:
cache.remove(char)
else:
cache.add(char)
return len(cache) <= 1
Instead of maintaining any counts of characters to check for oddness or evenness, simply add and remove characters from a set. A character repeated an even number of times will be removed from the set; a character repeated an odd number of times will remain in the set. If the final set has a length less than or equal to one, it is a permutation of a palindrome.