面试题 01.04. 回文排列
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。
func canPermutePalindrome(s string) bool {
bit := uint64(0)
for k := range s {
if 'a' <= s[k] && s[k] <= 'z' {
bit ^= 1 << (s[k] - 'a')
}
if 'A' <= s[k] && s[k] <= 'Z' {
bit ^= 1 << (s[k] - 'A' + 26)
}
}
return bit & (bit - 1) == 0
}
/*
xor := byte(0)
for k := range s {
xor ^= byte(s[k])
}
fmt.Println(xor)
if 'a' <= xor && xor <= 'z' && len(s) & 1 == 1 {
xor = byte(0)
}
return xor == byte(0)
这是一个错误解法
"abdg"
target false
result true
*/