一、题目表述
1、给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
2、回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
3、回文串不一定是字典当中的单词。
示例1:
输入:"tactcoa"
输出:true(排列有"tacocat"、"atcocta",等等)
二、代码
java
class Solution {
public boolean canPermutePalindrome(String s) {
HashMap<Character,Integer> hashMap = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
//getOrDefault,获取指定key的value,如果找不到就返回默认值
hashMap.put(s.charAt(i),hashMap.getOrDefault(s.charAt(i),0)+1);
}
//记录有多少单个的字符
int odd = 0;
for(int val : hashMap.values()){
if(val % 2 == 1){
++odd;
if(odd>1){
return false;
}
}
}
return true;
}
}
三、笔记反思
1、判断某字符串是否为某个回文串的排列之一,核心逻辑:最多只能有一个字符出现奇数次 。
2、使用 HashMap<Character, Integer> 存储每个字符的出现次数。
3、getOrDefault(key, defaultValue) 方法:若 key 存在,返回对应值;否则返回默认值 defaultValue。