原文链接: https://leetcode-cn.com/problems/palindrome-permutation-lcci
英文原文
Given a string, write a function to check if it is a permutation of a palindrome. A palindrome is a word or phrase that is the same forwards and backwards. A permutation is a rearrangement of letters. The palindrome does not need to be limited to just dictionary words.
Example1:
Input: "tactcoa" Output: true(permutations: "tacocat"、"atcocta", etc.)
中文题目
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。
示例1:
输入:"tactcoa" 输出:true(排列有"tacocat"、"atcocta",等等)
通过代码
高赞题解
每个字符出现的次数为偶数, 或者有且只有一个字符出现的次数为奇数时, 是回文的排列; 否则不是.
class Solution {
public boolean canPermutePalindrome(String s) {
Set<Character> set = new HashSet<>();
for (char c : s.toCharArray()) {
if (!set.add(c)) {
set.remove(c);
}
}
return set.size() <= 1;
}
}
不使用jdk现成的数据结构, 自己用数组实现哈希表逻辑.
count记录”出现次数为奇数”的字符的个数
对于当前字符c, 如果之前已出现过奇数次, 则count减1; 否则count加1.
class Solution {
public boolean canPermutePalindrome(String s) {
int[] map = new int[256];
int count = 0;
for (char c : s.toCharArray()) {
if ((map[c]++ & 1) == 1) {
count--;
} else {
count++;
}
}
return count <= 1;
}
}
统计信息
通过次数 | 提交次数 | AC比率 |
---|---|---|
43010 | 78293 | 54.9% |
提交历史
提交时间 | 提交结果 | 执行时间 | 内存消耗 | 语言 |
---|