※ 引述《oin1104 (是oin的说)》之铭言:
: 题目
: 这字串能不能弄成K个回文字串
: 思路
: 一定要偶数才能弄到回文的两边
: 奇数只能放中间 所以不能超过k个
: class Solution {
: public:
: bool canConstruct(string s, int k)
: {
: int n = s.size();
: if(k == n )return 1;
: if(k > n)return 0;
: vector<int> save(26,0);
: for(char k : s)save[k-'a'] ++;
: int cnt = 0;
: for(int i = 0 ; i < 26 ; i ++)
: {
: if(save[i]%2 == 1)cnt ++;
: }
: return cnt <= k;
: }
: };
思路:
先统计各个字母个数
有两种状况无法达成题目要求:
1. 字母个数为奇数的数量 > k
2. s长度 < k
其他都能达成题目要求
python:
class Solution:
def canConstruct(self, s: str, k: int) -> bool:
if len(s) < k:
return False
result = 0
record = [0] * 26
for c in s:
record[ord(c) - ord("a")] += 1
odd = 0
even = 0
for n in record:
if n % 2 == 1:
odd += 1
else:
even += 1
if odd > k:
return False
return True
应该是ㄅ 我没想到会一次过==