leetcode1177. 构建回文串检测(前缀和)

给你一个字符串 s,请你对 s 的子串进行检测。

每次检测,待检子串都可以表示为 queries[i] = [left, right, k]。我们可以 重新排列 子串 s[left], …, s[right],并从中选择 最多 k 项替换成任何小写英文字母。

如果在上述检测过程中,子串可以变成回文形式的字符串,那么检测结果为 true,否则结果为 false。

返回答案数组 answer[],其中 answer[i] 是第 i 个待检子串 queries[i] 的检测结果。

注意:在替换时,子串中的每个字母都必须作为 独立的 项进行计数,也就是说,如果 s[left…right] = “aaa” 且 k = 2,我们只能替换其中的两个字母。(另外,任何检测都不会修改原始字符串 s,可以认为每次检测都是独立的)

示例:

输入:s = “abcda”, queries = [[3,3,0],[1,2,0],[0,3,1],[0,3,2],[0,4,1]]
输出:[true,false,false,true,true]
解释:
queries[0] : 子串 = “d”,回文。
queries[1] : 子串 = “bc”,不是回文。
queries[2] : 子串 = “abcd”,只替换 1 个字符是变不成回文串的。
queries[3] : 子串 = “abcd”,可以变成回文的 “abba”。 也可以变成 “baab”,先重新排序变成 “bacd”,然后把 “cd” 替换为 “ab”。
queries[4] : 子串 = “abcda”,可以变成回文的 “abcba”。

代码

class Solution {int[][] t;public List<Boolean> canMakePaliQueries(String s, int[][] queries) {int n=s.length();List<Boolean> res=new ArrayList<>();t=new int[n+1][26];for (int i=1;i<=n;i++)//字符个数的前缀和{int cur=s.charAt(i-1)-'a';t[i]=t[i-1].clone();t[i][cur]++;}for(int[] c:queries)res.add(getCanMakePaliQueries(s,c[0],c[1])<=c[2]);return res;}public int  getCanMakePaliQueries(String s, int l,int r) {
//统计区间内组成回文需要改变的字符个数int res=0;int[] helper=new int[26];for(int i=0;i<26;i++){int  c=t[r+1][i]-t[l][i];if(c%2==1)res++;}return res/2;}
}

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

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

相关文章

java界面化二叉排序树_层次序创建二叉树(图形界面和控制台输入实现)

1 2018.11.72 XT34 /**5 * 功能&#xff1a;构造二叉树6 * 说明&#xff1a;7 * 1.主函数输入模式有两种&#xff0c;BT参数 true 图形界面&#xff0c;false 控制台输入8 * 2.构造树是按层次遍历结果输入的 如&#xff1a;ABCDE*F**GH9 */1011 import javax.swing.*;12 import…

web开发环境_Web开发人员的开发环境

web开发环境With all the tools and programs available, it can be challenging to figure out the best way to set up your development environment on your computer.使用所有可用的工具和程序&#xff0c;寻找在计算机上设置开发环境的最佳方法可能是一项挑战。 In this…

使用.net Stopwatch class 来分析你的代码

当我们在调试&#xff0c;优化我们的代码的时候&#xff0c;想知道某段代码的真正的执行时间&#xff0c;或者我们怀疑某段代码&#xff0c;或是某几段代码执行比较慢&#xff0c; 需要得到具体的某段代码的具体执行时间的时候。有一个很好用的类Stopwatch。 Stopwatch 类在 Sy…

Docker 部署 postgresql 与 pgadmin4

Docker快速部署PostgreSQL服务 快速开始 请新建一个目录postgresql&#xff0c;进入目录postgresql&#xff0c;将以下文件保存为docker-compose.yml&#xff0c;然后执行docker-compose up version: 3 services:mydb:image: postgres:11volumes:- db-data:/var/lib/postgresql…

leetcode151. 翻转字符串里的单词

给定一个字符串&#xff0c;逐个翻转字符串中的每个单词。 示例 1&#xff1a; 输入: “the sky is blue” 输出: “blue is sky the” 代码 class Solution {public String reverseWords(String s) {int ns.length(),i0;ArrayList<String> arrayListnew ArrayList<…

java衍生作用_java-如何从AffineTransform衍生的形状对象中“...

您可以使用AffineTransform.transform(Point2D, Point2D)变换多边形上的单个点.如果您不使用旋转变换来移动船,而是将船的位置保持在一个(x,y)位置,那么事情就简单得多.您可以在move()中移动飞船的位置,而不是尝试平移多边形.然后,当您想给船上油漆时,例如做&#xff1a;// Opt…

初学者设计数据库_面向初学者的完整数据库设计课程

初学者设计数据库This database design course will give you a deeper grasp of database design. Caleb Curry teaches the equivalent of an entire college course during this eight hour video.本数据库设计课程将使您更深入地了解数据库设计。 在这8个小时的视频中&…

Qt QTcpSocket使用总结

socket的连接是异步的&#xff0c;所以必须等连接建立完成才能使用&#xff0c;所以分别加入waitForConnected()和waitForBytesWritten()后调试通过1&#xff09;只有使用waitForConnected()后,QTcpSocket才真正尝试连接服务器&#xff0c;并返回是否连接的结果2&#xff09;避…

[bzoj1303][CQOI2009]中位数图

来自FallDream的博客&#xff0c;未经允许&#xff0c;请勿转载&#xff0c;谢谢。 给定一个n个数排列&#xff0c;求有多少段长度为奇数的区间&#xff0c;中位数是b. n<100000 时间限制0.1s 我一开始没看到排列&#xff0c;想着怎么还能O(n)做的啊&#xff1f;&#xff1f…

falsk 请求没有返回值报错

线上报警 5xx 错误&#xff0c;查看日志发现报这个错&#xff0c; TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement. 这个方法没有有效的返回结果 页面报这个错误 Internal Server Err…

java的iterator接口_java Iterator接口和LIstIterator接口分析_java_脚本之家

java Iterator接口和LIstIterator接口分析目录1.Iterator接口2.ListIterator3.Iterator和ListIterator的区别正文在继续看ArrayList源码之前&#xff0c;先了解Iterator接口和ListIterator接口&#xff0c;下篇文章详细讲解ArrayList是如何实现它们的。我们知道&#xff0c;接…

leetcode468. 验证IP地址

编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。 IPv4 地址由十进制数和点来表示&#xff0c;每个地址包含4个十进制数&#xff0c;其范围为 0 - 255&#xff0c; 用(".")分割。比如&#xff0c;172.16.254.1&#xff1b; 同时&#xff0c;IPv4 地…

播客#45:迪伦·以色列

On todays episode, I interview Dylan Israel. Dylan is a software engineer, a YouTuber, and the creator of several programming courses.在今天的一集中&#xff0c;我采访了迪伦以色列。 迪伦(Dylan)是一位软件工程师&#xff0c;一名YouTuber&#xff0c;并且是几门编…

PHPstorm快捷键

当前文件搜索类&#xff1a;ctrln 全文检索文件&#xff1a;ctrlshiftn 收起侧边栏&#xff1a;alt1&#xff08;自定义&#xff09; 个人学习记录&#xff0c;持续更新中。。。 转载于:https://www.cnblogs.com/zaijiang/p/7806260.html

JS基础_强制类型转换-Number

https://www.cnblogs.com/ZHOUVIP/p/7225267.html转载于:https://www.cnblogs.com/robinunix/p/11011188.html

JavaScript变量和作用域

JavaScript有两种变量&#xff0c;全局变量和局部变量 如果在任何函数定义之外声明了一个变量&#xff0c;则该变量是全局变量&#xff0c;且该变量的值在整个持续范围内都可以访问和修改 如果在函数定义内声明来了一个变量&#xff0c;则该变量为局部变量。每次执行该函数时都…

python 微信bot_使用Python创建Twitter Bot

python 微信botHave you ever wantd to create a Twitter bot? In this tutorial John G. Fisher shows how to create a bot with Python that tweets images or status updates at a set interval.您是否曾经想创建一个Twitter机器人&#xff1f; 在本教程中&#xff0c;约翰…

leetcode1487. 保证文件名唯一

给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹&#xff1a;在第 i 分钟&#xff0c;新建名为 names[i] 的文件夹。 由于两个文件 不能 共享相同的文件名&#xff0c;因此如果新建文件夹使用的文件名已经被占用&#xff0c;系统会以 (k) 的形式为新…

提高redis cluster集群的安全性,增加密码验证

节点设置密码 1、修改配置文件 在配置文件里面增加密码选项&#xff0c;一定要加上masterauth&#xff0c;不然Redirected的时候会失败。 masterauth redispassword requirepass redispassword 修改后需要重启redis节点。 2、动态修改 连接redis节点进行配置设置&#xff0c;然…

java索引ref_java – 如何使用jgit库将git HEAD指向特定的ref?

我想以编程方式更新HEAD而不对非裸仓库执行checkout或rebase.我希望工作树和索引在操作后保持不变.编辑我需要更新HEAD的符号目标,而不是HEAD当前目标的提交ID.这更像是一个结账,而不是其他任何东西,除了我不能使用org.eclipse.jgit.api.CheckoutCommand因为它需要我更新路径,但…