题目:给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。
示例1:
输入:"tactcoa"
输出:true(排列有"tacocat"、"atcocta"等等)
1. 思考
判断一个字符串是否是回文串的排列之一,可以先思考回文串的特性:
回文串就是正,反两个方向读都一致的字符串,比如ABBA、ABCBA。
可以发现:
1. 偶数个字符,所有字符出现偶数次,即没有字符出现奇数次
2. 奇数个字符,仅有唯一一个字符出现奇数次
因为没有字符出现奇数次时,字符串字符必定是偶数个;仅有唯一一个字符出现奇数次时,字符串字符必定是奇数个,所以上述限制条件可以统一成:不超过一个字符出现奇数次。
2. 常规解法
采用映射表记录每个字符出现的次数,遍历结果,查看出现奇数次的字符个数是否超过1。
public boolean canPermutePalindrome(String s) {
Map<Character, Integer> map = new HashMap<>();
for (Character item : s.toCharArray()) {
map.put(item