[LeetCode] 1400. Construct K Palindrome Strings
Given a string s and an integer k, return true if you can use all the characters in s to construct k palindrome strings or false otherwise.
Example 1:
Input: s = “annabelle”, k = 2
Output: true
Explanation: You can construct two palindromes using all characters in s.
Some possible constructions “anna” + “elble”, “anbna” + “elle”, “anellena” + “b”
Example 2:
Input: s = “leetcode”, k = 3
Output: false
Explanation: It is impossible to construct 3 palindromes using all the characters of s.
Example 3:
Input: s = “true”, k = 4
Output: true
Explanation: The only possible solution is to put each character in a separate string.
Constraints:
1 <= s.length <= 105
s consists of lowercase English letters.
1 <= k <= 105
构造 K 个回文字符串。
给你一个字符串 s 和一个整数 k 。请你用 s 字符串中 所有字符 构造 k 个非空 回文串 。如果你可以用 s 中所有字符构造 k 个回文字符串,那么请你返回 True ,否则返回 False 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/construct-k-palindrome-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
思路是贪心。题意是试图把 input 字符串 s 分割,请你判断是否有可能把 input 字符串分割成 k 份,同时每份子串都是一个回文串。这里贪心的思想是,如果我可以把 s 分成 k 个回文串的话,那么出现次数为奇数的字母个数一定不能超过 k 个,否则就不行。出现次数为 3 次或者 5 次的字母的确可以自成一个回文,但是他不能再和其他出现次数为奇数的字母合并成另一个回文了,所以出现次数为奇数的字母有多少,就会产生多少个子串。如果这个数字大于 k,就不能满足题意。
复杂度
时间O(n)
空间O(n)
代码
Java实现
1 |
|