首页 > 其他 > 详细

【LeetCode-字符串/哈希表】回文排列

时间:2020-05-13 23:42:38      阅读:77      评论:0      收藏:0      [点我收藏+]

题目描述

给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。
示例:

输入:"tactcoa"
输出:true(排列有"tacocat"、"atcocta",等等)

题目链接: https://leetcode-cn.com/problems/palindrome-permutation-lcci/

思路

判断一个字符串其是否为某个回文串的排列之一,也就是判断该字符串是否能调整为回文串。如果一个字符串经过调整能变成回文串,那么统计该字符串中每个字符出现的次数,那么最多只会有 1 个字符的出现次数为奇数。例如,abab 能调整为回文串,ab 的出现次数均为偶数;ababc 能调整为回文串,只有一个字符 c 的出现次数为奇数;ababcd 不能调整为回文串,因为有 2 个字符 cd 的出现次数为奇数。所以,我们使用哈希表统计每个字符出现的次数,然后统计奇数的个数。如果奇数的个数小于等于 1,则能调整为回文串,返回 true,否则返回 false. 代码如下:

class Solution {
public:
    bool canPermutePalindrome(string s) {
        if(s.empty()) return true;

        vector<int> hash(256, 0);
        for(int i=0; i<s.length(); i++){
            hash[s[i]]++;
        }

        int oddNums = 0;
        for(int i=0; i<hash.size(); i++){
            if(hash[i]%2!=0) oddNums++;
        }

        if(oddNums>1) return false;
        else return true;
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

【LeetCode-字符串/哈希表】回文排列

原文:https://www.cnblogs.com/flix/p/12885284.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!