Leetcode 第23场双周赛B 5362. 构造 K 个回文字符串(map,思维)

时间:2022-07-26
本文章向大家介绍Leetcode 第23场双周赛B 5362. 构造 K 个回文字符串(map,思维),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

5362. 构造 K 个回文字符串

给你一个字符串 s 和一个整数 k 。请你用 s 字符串中 所有字符 构造 k 个非空 回文串

如果你可以用 s 中所有字符构造 k 个回文字符串,那么请你返回 True ,否则返回 False

示例 1:

输入:s = "annabelle", k = 2
输出:true
解释:可以用 s 中所有字符构造 2 个回文字符串。
一些可行的构造方案包括:"anna" + "elble","anbna" + "elle","anellena" + "b"

示例 2:

输入:s = "leetcode", k = 3
输出:false
解释:无法用 s 中所有字符构造 3 个回文串。

示例 3:

输入:s = "true", k = 4
输出:true
解释:唯一可行的方案是让 s 中每个字符单独构成一个字符串。

示例 4:

输入:s = "yzyzyzyzyzyzyzy", k = 2
输出:true
解释:你只需要将所有的 z 放在一个字符串中,所有的 y 放在另一个字符串中。那么两个字符串都是回文串。

示例 5:

输入:s = "cr", k = 7
输出:false
解释:我们没有足够的字符去构造 7 个回文串。

提示:

  • 1 <= s.length <= 10^5
  • s 中所有字符都是小写英文字母。
  • 1 <= k <= 10^5

思路:特判一下字符串长度小于k的情况,然后我们可以这样想,回文串每个可以多带一个奇数次数出现的字符,那么我们可以统计字符串中奇数出现的字符如果奇数次数出现的字符个数大于k则无解,否则一定可以构造出

class Solution {
public:
    bool canConstruct(string s, int k) {
        map<char,int>p;
        int cnt=0,flag=0;
        for(int i=0;s[i];i++)p[s[i]]++;
        for(auto it:p)
        {
            if(it.second%2)cnt++;
        }
        
        if(cnt>k||s.size()<k)flag=0;
        else flag=1;
        return flag;
    }
};