给你一个字符串 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 中每个字符单独构成一个字符串。

示例 4:

输入:s = "yzyzyzyzyzyzyzy", k = 2
输出:true
解释:你只需要将所有的 z 放在一个字符串中,所有的 y 放在另一个字符串中。那么两个字符串都是回文串。

示例 5:

输入:s = "cr", k = 7
输出:false
解释:我们没有足够的字符去构造 7 个回文串。

提示:

  • 1 <= s.length <= 10^5
  • s 中所有字符都是小写英文字母。
  • 1 <= k <= 10^5

解题思路

如果len(s) < k,那么必然无解。接着可以统计s中每个字符出现的次数,对于出现次数为偶数次的字符,实际上它放在哪里都没有关系,只需要考虑奇数次的字符。如果有t个奇数次字符,那么

  • t <= k,存在解
  • t > k,不存在解

如何理解呢?可以将t个不同字符放入k个字符串中,如果t <= k,那么可以划分为t个奇数长度的回文串和k-t个偶数长度的字符串;如果t > k,那么必然有两个以上的奇数个数的字符在同一个字符串里面,无论如何都构不成回文串。

class Solution:def canConstruct(self, s: str, k: int) -> bool:return sum([v % 2 for v in collections.Counter(s).values()]) <= k <= len(s)

我将该问题的其他语言版本添加到了我的GitHub Leetcode

如有问题,希望大家指出!!!

Leetcode 1400:构造K个回文字符串(超详细的解法!!!)相关推荐

  1. leetcode 1400. 构造 K 个回文字符串

    leetcode 1400. 构造 K 个回文字符串 文章目录 leetcode 1400. 构造 K 个回文字符串 一.题目 1.题目描述 2.基础框架 3.解题思路 一.题目 原题链接:1400. ...

  2. 1400. 构造 K 个回文字符串

    1400. 构造 K 个回文字符串 给你一个字符串 s 和一个整数 k .请你用 s 字符串中 所有字符 构造 k 个非空 回文串 . 如果你可以用 s 中所有字符构造 k 个回文字符串,那么请你返回 ...

  3. 【LeetCode】1400. 构造 K 个回文字符串 Construct K Palindrome Strings

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 统计奇数字符出现次数 日期 题目地址:https:// ...

  4. 【LeetCode成长之路:回文字符串运用题】 回文子串与最长回文子串

    ⭐️前面的话⭐️ 本篇文章介绍有关回文字符串两道题题解,分别为[647. 回文子串 ]和[ 5. 最长回文子串], 难度均为: 中等 标签: 双指针中心扩散 动态规划,展示语言java.

  5. Leetcode 29:两数相除(超详细的解法!!!)

    给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...

  6. Leetcode 1258:近义词句子(超详细的解法!!!)

    给你一个近义词表 synonyms 和一个句子 text , synonyms 表中是一些近义词对 ,你可以将句子 text 中每个单词用它的近义词来替换. 请你找出所有用近义词替换后的句子,按 字典 ...

  7. Leetcode 953:验证外星语词典(超详细的解法!!!)

    某种外星语也使用英文小写字母,但可能顺序 order 不同.字母表的顺序(order)是一些小写字母的排列. 给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在 ...

  8. Leetcode 1125:最小的必要团队(超详细的解法!!!)

    作为项目经理,你规划了一份需求的技能清单 req_skills,并打算从备选人员名单 people 中选出些人组成一个「必要团队」( 编号为 i 的备选人员 people[i] 含有一份该备选人员掌握 ...

  9. Leetcode 1229:安排会议日程(超详细的解法!!!)

    你是一名行政助理,手里有两位客户的空闲时间表:slots1 和 slots2,以及会议的预计持续时间 duration,请你为他们安排合适的会议时间. 「会议时间」是两位客户都有空参加,并且持续时间能 ...

最新文章

  1. LLDB+Python脚本:增强LLDB调试
  2. nginx 如何处理请求系列1-Nginx安装
  3. 数组之冒泡排序、选择排序
  4. 从零写一个编译器(三):语法分析之几个基础数据结构
  5. Django从理论到实战(part43)--HttpResponse对象
  6. 梦幻群侠传5帮派修炼_梦幻西游:2020年十大更新回顾 法连不秒空和连续战斗修复...
  7. python不换行空格输出_解决Python print输出不换行没空格的问题
  8. 液晶拼接处理器_液晶拼接屏方案的制作和规划
  9. shell 免杀aspx_记一次aspx网站渗透
  10. android 解压gzip,在Android中使用GZIPInputStream解压缩数据
  11. Unity UGUI源码解析
  12. 产业分析:2021抖音数据报告
  13. 华为路由器忘记密码怎么恢复
  14. 年终盘点:2010年半导体产业十大进展
  15. Oracle数据库(完整版)
  16. 西工大机考《 合同法》大作业网考
  17. Java - 使用Cipher类实现加密(RSA)
  18. 敏感词过滤优化的解决方案
  19. mysql instr locate_mysql函数之一:INSTR、LOCATE、POSITION VS LIKE
  20. Netty5的例子,简单介绍Netty的用法

热门文章

  1. 2022年11月7日-2022年11月13日学习周报
  2. idea手动打包Docker部署linux
  3. 初试 RabbitMQ采坑记录:org.springframework.amqp.AmqpIOException: java.io.IOException
  4. 派森小镇(六)熊孩子
  5. docker容器内时区相差8小时问题
  6. guava 各个版本下载地址
  7. /Localizable.strings:0: error: read failed: The data couldn’t be read because it isn’t in the correc
  8. 普林斯顿微积分读本——第一章 函数、图像和直线(读书笔记)
  9. 不告诉你永远不知道的程序
  10. 初音未来千本樱计算机简谱,千本樱钢琴简谱-数字双手-初音未来