- 一、题目描述
- 二、思路详解
- 三、参考代码
- 【1.0】字典解法
- 【2.0】集合解法
- 四、题目来源
二、思路详解给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。 回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。 回文串不一定是字典当中的单词。
三、参考代码 【1.0】字典解法回文字符串的特征:
1、所有出现的字符要么都是偶数个数;
2、所有出现的字符要么只有一个奇数个数,其他都是偶数
抓住奇数这个特征;用字典来统计单个元素出现的次数;
class Solution {
public boolean canPermutePalindrome(String s)
{
//回文字符串的特征:1、所有出现的字符都是偶数个数;2、所有出现的字符只有一个奇数个数,其他都是偶数
Byte flag = 0;//奇数标志位
HashMapdic = new HashMap<>(); //字典
// 字典赋值
for(int i=0; i1)
return false;
}
}
return true;
}
}
【2.0】集合解法
每个字符出现的次数为偶数, 或者有且只有一个字符出现的次数为奇数时, 是回文的排列; 否则不是.
class Solution {
public boolean canPermutePalindrome(String s) {
Set set = new HashSet<>();
for (char c : s.toCharArray()) {
if (!set.add(c)) {
set.remove(c);
}
}
return set.size() <= 1;
}
}
//来源:
//作者:jiangzs
//链接:https://leetcode-cn.com/problems/palindrome-permutation-lcci/solution/li-yong-ha-xi-biao-by-jiangzs/
//源:力扣(LeetCode)
//著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
四、题目来源
面试题 01.04. 回文排列



