用C ++构造K回文字符串
假设我们有一个字符串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