LeetCode·每日一题·1177. 构建回文串检测·前缀和

news2024/11/27 7:18:38

作者:小迅
链接:https://leetcode.cn/problems/can-make-palindrome-from-substring/solutions/2309940/qian-zhui-he-zhu-shi-chao-ji-xiang-xi-by-n3ps/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题目

 

思路

题意 -> 给定一个字符串,选择其中任意位置 L-R,可以重排任意字符和替换任意 K 个字符,使得 L-R 子串为 回文串,能满足要求则为 TRUE,不能则为 FALSE。

要求转换为 回文串,什么是回文串呢?形如 abccba 则为回文串,其中存在一个特点为 相同字符为偶数 或者 在前者基础上只有一个字符出现次数为奇数。

那么现在就简单了,题意只关心能否到达要求,不关心其具体字符。那么就可以将给定字符串转换为 字符出现次数串,判断一个子串能否转换为回文串 -> 判断将当前位置中字符出现次数是否满足上述要求

那么如何转换到上述题意要求呢? 给定一个子串:

  • 相同字符出现的次数如果为偶数的话,那么这个字符就不需要使用 修改次数
  • 相同字符出现的次数如果为奇数的话:
    • 只有一个字符出现奇数次数, 不需要使用 修改次数
    • 多个字符出现奇数次数的话, 需要使用 出现次数 / 2 次 修改次数,将多余的字符转换为 偶数次出现

如何统计每一个位置字符的出现次数呢?

  • 使用数组记录每一个子串的字符出现次数
  • 因为字符只有26个,那么可以使用一个int型位记录出现次数 0 表示偶数次,1表示奇数次
  • 可以使用前缀和,任意位置可以通过左右两个子串状态相差得出当前状态

代码注释超级详细

代码


/**
 * Note: The returned array must be malloced, assume caller calls free().
 */

bool* canMakePaliQueries(char * s, int** queries, int queriesSize, int* queriesColSize, int* returnSize) {
    int n = strlen(s);
    int* count = (int*)malloc((n + 1) * sizeof(int));//二进制代替数组
    memset(count, 0, (n + 1) * sizeof(int));//初始化
    for (int i = 0; i < n; i++) {//前缀和枚举
        // ^ 为不带进位的加法
        count[i + 1] = count[i] ^ (1 << (s[i] - 'a'));//记录整体状态
    }
    bool* res = (bool*)malloc(queriesSize * sizeof(bool));//返回值数组
    for (int i = 0; i < queriesSize; i++) {//枚举子串
        int l = queries[i][0], r = queries[i][1], k = queries[i][2];
        //根据上述表示,大于13则可以能满足转换要求
        //if (k >= 13) {res[i] = true; continue;}
        // 由于没有负值, 那么 0 - 1 等价于 0 + 1
        int bits = 0, x = count[r + 1] ^ count[l];//相差得出当前状态
        while (x > 0) {//求当奇数出现次数
            x &= x - 1;
            bits++;
        }
        res[i] = bits / 2 <= k;//保存有效值
    }
    *returnSize = queriesSize;
    free(count);
    return res;
}



作者:小迅
链接:https://leetcode.cn/problems/can-make-palindrome-from-substring/solutions/2309940/qian-zhui-he-zhu-shi-chao-ji-xiang-xi-by-n3ps/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/648853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新水文水动力模型在城市内涝、城市排水、海绵城市规划设计中深度应用

随着计算机的广泛应用和各类模型软件的发展&#xff0c;将排水系统模型作为城市洪灾评价与防治的技术手段已经成为防洪防灾的重要技术途径。本次培训将聚焦于综合利用GIS及CAD等工具高效地进行大规模城市排水系统水力模型的建立&#xff0c;利用SWMM实现排水系统水力模拟。讲解…

【RH850/U2A】:GreenHills编译配置

GreenHills编译配置 GreenHills语法.gpj文件.opt文件示例GreenHills编译器在编译我们的文件时涉及它需要哪些文件及相关配置呢?带着疑问我们开始来梳理。 我们还是以具体示例来展开(硬件平台:RH850 U2A8) GreenHills语法 一般我们是需要查看它的帮助文档的,文档在哪里呢?…

CSP第二轮/NOIP 比赛注意事项

一、在哪里写代码 主办方会提前在桌面已在 E 盘根目录下建立以考生准考证编号命名的文件夹,考生应检查该文件夹名称是否正确(包括编号及大小写字母),如有错误须立即上报监考人员,由监考人员进行更改。确认无误后,考生须为每道试题再单独建立一个子文件夹,子文件夹名与对应…

某互联网银行绿色金融背后的“安全秘诀”

​随着银保监会出台《银行业保险业绿色金融指引》、人民银行牵头制定《G20转型金融框架》的发布&#xff0c;金融行业正在持续加大对绿色金融支持力度。某互联网银行为了响应号召&#xff0c;采用数字化无纸化办公&#xff0c;线上零接触服务减少大量碳排放&#xff0c;成为国内…

oracle rac架构解读

一、oracle 数据库架构 单节点数据库&#xff0c;如果实例宕机了&#xff0c;如果一个业务链接在实例上面&#xff0c;那么这个业务就中断了。这个时候系统就不具有可用性了&#xff0c;那么这个时候单节点的可用性是很差的。 对于RAC来说&#xff0c;和单实例一样&#xff0c;…

新榜 | 小红书美妆用户趋势洞察报告

目前&#xff0c;小红书上聚集了大量年轻、高知的女性美妆用户&#xff0c;她们倾向于在小红书平台分享美妆护肤产品和使用经验&#xff0c;用户间的互动、分享氛围浓厚&#xff1b;而这些评论互动也传递了用户的真实诉求&#xff0c;理解用户的关注点对于企业和品牌来说将具有…

Vue中如何进行数据导入与Excel导入

Vue中如何进行数据导入与Excel导入 Vue是一款非常流行的JavaScript框架&#xff0c;它提供了一套用于构建用户界面的工具和库。在Vue中&#xff0c;我们可以使用多种方式来导入数据&#xff0c;包括从服务器获取数据、从本地存储获取数据、从文件中读取数据等等。其中&#xf…

如何提高职场沟通能力

如何提高职场沟通能力 在现代职场中&#xff0c;良好的沟通能力不仅有助于我们更好地完成工作任务&#xff0c;还能提高团队协作效率&#xff0c;降低矛盾和误解。本文将为你提供一些建议和技巧&#xff0c;帮助你提高职场沟通能力。 1. 倾听 倾听是沟通中最重要的技能之一…

社招准备和面试题

这次就整理下这次社招都做了哪些准备以及自己面试过的题目。 首先就是专业知识的准备&#xff0c;看了很多常用的机器学习算法&#xff0c;并对其算法做了推导。看了深度学习推荐系统这本书里面的模型&#xff0c;对自己简历中涉及到的模型重点掌握&#xff0c;比如DIN、DIEN、…

创客匠人6月功能更新:服务商管理、直播、学员版APP全新上线

创客匠人6月功能更新&#xff0c;包括服务商管理、直播、学员版APP、圈子、商城、店铺等众多产品升级&#xff0c;我们一起来看看吧。 正式升级时间&#xff1a;6月20日 一、服务商管理 1.服务商模块排版优化&#xff1a;支持查看整个团队的用户信息和业绩明细。 2.支持记…

嵌套滚动实践:onInterceptTouchEvent与NestedScrolling【实用为准】

嵌套滚动&#xff1a;内外两层均可滚动&#xff0c;比如上半部分是一个有限的列表&#xff0c;下半部分是WebView&#xff0c;在内层上半部分展示到底的时候&#xff0c;外部父布局整体滚动内部View&#xff0c;将底部WevView拉起来&#xff0c;滚动到顶部之后再将滚动交给内部…

SQL Server 无备份情况下误操作数据恢复(3)

原文链接&#xff1a;https://blog.csdn.net/dba_huangzj/article/details/8491327 问题&#xff1a; 经常看到有人误删数据&#xff0c;或者误操作&#xff0c;特别是update和delete的时候没有加where&#xff0c;然后就喊爹喊娘了。人非圣贤孰能无过&#xff0c;做错可以理解…

Verilog 高级知识点---状态机

目录 状态机 1、Mealy 状态机 2、Moore 状态机 3、三段式状态机 状态机 Verilog 是硬件描述语言&#xff0c;硬件电路是并行执行的&#xff0c;当需要按照流程或者步骤来完成某个功能时&#xff0c;代码中通常会使用很多个 if 嵌套语句来实现&#xff0c;这样就增加了代码…

2DUI跟踪3D模型,更精准的嵌套与跟踪

实现的效果&#xff1a; 1、2DUI跟踪模型指定位置&#xff0c;跟随模型移动 2、2DUI时刻面向摄像机 首先准备一个模型。如下图&#xff1a; 在此模型层级下新建Canvas&#xff08;画布&#xff09; 改显示模式为世界空间 在canvas下创建Image&#xff08;图像&#xff09; 放…

包看包会Stable Diffusion原理,新手也能看明白

知道看文章的人怎么看&#xff0c;听我讲的人经常反应的就是听不明白。于是我又在网上找了一下&#xff0c;发现这篇文章讲的很好&#xff0c;算得上是深入浅出&#xff0c;可惜是英文的&#xff0c;就把它翻译了一下&#xff1a; https://stable-diffusion-art.com/how-stabl…

一次过!快速申领软件著作权

文章目录 一次过&#xff01;快速申领软件著作权1 软件著作权的定义2 申请流程2.1 准备申请材料2.2 登录软著局申请系统并进行填写2.3 审核2.4 补正和修改申请材料2.5 接受核准并领证 3 申请材料4 注意事项5 总结 一次过&#xff01;快速申领软件著作权 申领软件著作权是保护软…

【Nexus】Nexus创建Maven私服

目录 一、前言二、创建Blob Stores1、在创建Repository之前&#xff0c;设定一个文件存储目录Blob&#xff0c;方便后序管理2、选择创建的Blob类型为File&#xff0c;根据需要选择是否超出约束时进行报警&#xff0c;以及约束类型和约束限制3、成功创建好的页面 三、创建Reposi…

如何快速翻译ppt文档?分享几个实用的文档翻译方法

想必你也曾有过这样的困扰&#xff1a;在工作或学习中&#xff0c;需要阅读外语PPT的内容&#xff0c;但是却遇到了语言障碍&#xff0c;无法流利地理解其中的意思。这时&#xff0c;我们就需要翻译ppt的软件来帮助我们解决问题。那么&#xff0c;翻译ppt的软件哪个好呢&#x…

【LeetCode热题100】打卡第22天:编辑距离颜色分类

文章目录 【LeetCode热题100】打卡第22天&#xff1a;编辑距离&颜色分类⛅前言 编辑距离&#x1f512;题目&#x1f511;题解 颜色分类&#x1f512;题目&#x1f511;题解 【LeetCode热题100】打卡第22天&#xff1a;编辑距离&颜色分类 ⛅前言 大家好&#xff0c;我是…

Vue杂记:全选多个选择框

可以使用 v-model 来绑定一个布尔类型的变量来实现全选多个选择框的功能。具体步骤如下&#xff1a; 在data中定义一个数组&#xff0c;用来存储所有需要选择的项的状态。 在模板中使用 v-for 指令循环渲染每个选择框&#xff0c;并将每个选择框的状态绑定到数组中对应的项上。…