zoukankan      html  css  js  c++  java
  • 刷题力扣面试题 01.04. 回文排列

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/palindrome-permutation-lcci
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目描述

    给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。

    回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。

    回文串不一定是字典当中的单词。

    示例1:

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

    题目分析

    1. 根据题目描述,回文排序要求字符串中出现的字符次数最多只有一个字符出现奇数次,其他的均为偶数次
    2. 使用hash map统计出现字符的次数,时间复杂度为O(n),空间复杂度为O(n)

    代码

    
    class Solution {
    public:
        bool canPermutePalindrome(string s) {
            if (s.length() < 2) { return true; }
            std::unordered_map<char, int> keyMap;
            int odd = 0;
            for (char c : s) { keyMap[c] += 1; }
            for (std::unordered_map<char, int>::const_iterator it = keyMap.cbegin(); it != keyMap.cend(); ++it) {
                if (it->second % 2 == 1) { ++odd; }
            }
            return odd > 1 ? false : true;
        }
    };
    
  • 相关阅读:
    在排序数组中查找元素
    搜索旋转排序数组
    下一个排列
    括号生成(回溯法)
    PHP之表单
    PHP之超级全局变量
    PHP之数组
    PHP之字符串
    PHP之常量
    PHP之echo/print
  • 原文地址:https://www.cnblogs.com/HanYG/p/15797614.html
Copyright © 2011-2022 走看看