加载中...
面试题 01.04-回文排列(Palindrome Permutation LCCI)
发表于:2021-12-03 | 分类: 简单
字数统计: 420 | 阅读时长: 1分钟 | 阅读量:

原文链接: 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%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言
上一篇:
面试题 05.04-下一个数(Closed Number LCCI)
下一篇:
面试题 01.07-旋转矩阵(Rotate Matrix LCCI)
本文目录
本文目录