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;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章