1177. 构建回文串检测

利用字符替换和重排判断子串能否变成回文 — 「字符串子串回文检测」

题目描述

给定一个字符串 s,和若干个查询,每个查询形式为 queries[i] = [left, right, k],表示对字符串子串 s[left..right] 进行如下操作:

  • 重新排列该子串的字符顺序。
  • 最多替换 k 个字符为任意小写字母。

问:是否存在一种操作方案,使得最终子串变成一个回文串?

返回一个布尔数组,表示每个查询的结果。


问题详解

判断一个字符串经过重新排列和替换字符后,是否能变成回文串的核心是理解回文的结构特征。

回文的性质

  • 偶数长度的回文,所有字符的出现次数都是偶数。
  • 奇数长度的回文,允许且只能允许一个字符出现奇数次,其他字符出现偶数次。

替换字符的影响

通过替换,能够将一些奇数次的字符“修正”为偶数次。

  • 每替换一次字符,相当于“修正”了两个奇数字符(比如将两个奇数字符中一个字符替换成另一个字符,使其次数变得偶数)。
  • 因此,如果子串中奇数次数的字符数是 oddCount,需要的替换次数是至少 oddCount // 2

解题思路

  1. 统计子串中各字符出现次数
  2. 计算奇数出现次数的字符数量 oddCount
  3. 判断是否满足 oddCount // 2 <= k,如果是,返回
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值