假设我们有一个字符串s和一个数字k。我们必须使用s中的所有字符构造k个非空回文字符串。因此,在这里我们必须检查是否可以使用s中的所有字符来构造k个回文字符串。
因此,如果输入像“ true”,k = 4,则输出将为True,因为唯一可能的解决方案是将每个字符放在单独的字符串中。
为了解决这个问题,我们将遵循以下步骤-
n:= s的大小
如果n <k,则-
返回假
如果n与k相同,则-
返回真
定义一张映射
对于s中的每个字符c
(将m [c]增加1)
奇数:= 0
对于每个键值对,以m为单位-
奇数:=奇数+(其值与1)
当奇数<= k时返回true,否则返回false
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: bool canConstruct(string s, int k) { int n = s.size(); if (n < k) return false; if (n == k) return true; map<char, int> m; for (char c : s) m[c]++; int odd = 0; for (auto& it : m) { odd += (it.second & 1); } return odd <= k; } }; main(){ Solution ob; cout << (ob.canConstruct("true",4)); }
"true"
输出结果
1