题目:回文排列
解题方法:
- 位运算:统计某个字符出现的次数是奇数还是偶数,可以用
异或^
来统计 - 哈希计数
- 桶计数(较简单,未给出代码)
原理都是统计字符串中每个字符出现的频数,如果奇数的个数小于等于1,则可以产生回文排列,否则不行
三种方法时间复杂度相同,但所用到的空间不同,
1 < 2 < 3
方法一:位运算
- 代码只存了小写和大写字母,其实可以用两个long int型的来存128个字符,使得代码鲁棒性更强
- 用异或操作来存储字符出现的奇偶,如果奇数则为1,偶数为0
- 最后判断s中字符出现的奇偶次数,奇数个数小于等于1时返回true
- 奇数个数为1,此时
mark
为\(2^x\),也就是\(00..010..0\)这种形式,此时可以用\(mark-1\),变为\(00...001...1\)的形式,此时两者用与操作,则为0 - 奇数个数为0,此时mark为0,mark-1为\(111...1\),此时与操作也是0
- 奇数个数为1,此时
1 | class Solution { |
方法二:哈希
1 | class Solution { |