1400. 构造 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 中每个字符单独构成一个字符串。
提示:
1 <= s.length <= 105
s
中所有字符都是小写英文字母。1 <= k <= 105
解法
方法一:计数
我们先判断字符串 \(s\) 的长度是否小于 \(k\),如果是,那么一定无法构造出 \(k\) 个回文串,可以直接返回 false
。
否则,我们用一个哈希表或数组 \(cnt\) 统计字符串 \(s\) 中每个字符出现的次数。最后,我们只需要统计 \(cnt\) 中奇数次数的字符个数 \(x\),如果 \(x\) 大于 \(k\),那么一定无法构造出 \(k\) 个回文串,返回 false
;否则,返回 true
。
时间复杂度 \(O(n)\),空间复杂度 \(O(C)\)。其中 \(n\) 是字符串 \(s\) 的长度;而 \(C\) 是字符集大小,这里 \(C=26\)。
1 2 3 4 5 6 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|