首页 > 其他分享 >2023.6.16 构建回文串检测

2023.6.16 构建回文串检测

时间:2023-06-16 19:33:48浏览次数:34  
标签:字符 奇数 可以 16 偶数 let 2023.6 回文

image

注意关键性质,可以重排。所以我们可以只考虑一种情况,其他情况都可以重排到这种情况。
考虑在区间内:

  1. 所有字符都有偶数个,此时不需要改变任何字符,我们可以把字符重排成回文的。
  2. 只有一种字符有奇数个,其他字符都是偶数个。此时可以拿出这种字符的一个放在最中间。然后又回归到情况1,可以重排成回文。
  3. 有两种字符有奇数个,其他字符偶数个。此时可以把其中一种字符的一个变成另外一种,回归情况1。(变化了一次)
  4. 有三种字符有奇数个,其他字符偶数个。此时可以把其中一种字符的一个变成另外一种,回归情况2。(变化了一次)
  5. 有四种字符有奇数个,其他字符偶数个。此时可以把其中一种字符的一个变成另外一种,再把剩下的两种也进行一次这种操作,回归到情况1。(变化了二次)
    ...

以此类推,可以看出,变化的次数是奇数字符的个数除以2。统计一个范围内字符的奇偶,可以用前缀和,由于只看奇偶,使用异或前缀和可以进一步压缩空间。

impl Solution {
    pub fn can_make_pali_queries(s: String, queries: Vec<Vec<i32>>) -> Vec<bool> 
    {
        let n = s.len();
        let mut prefix = vec![0; n + 1];

        for (i, c) in s.chars().enumerate() {
            let idx = c as u8 - 'a' as u8;
            prefix[i + 1] = prefix[i] ^ (1 << idx);
        }

        let mut res = Vec::new();
        for query in queries {
            let (l, r, k) = (query[0], query[1], query[2]);
            let cnt = ((prefix[(r + 1) as usize] ^ prefix[l as usize]) as usize).count_ones(); // 计算出奇数字符的个数
            res.push(cnt / 2 <= (k as u32));
        }
        res
    }
}

标签:字符,奇数,可以,16,偶数,let,2023.6,回文
From: https://www.cnblogs.com/st0rmKR/p/17486370.html

相关文章

  • 2023.6.16 每日一题
    原题链接B-Technocup2020-EliminationRound1-DB.SequenceSorting-2000题目大意给定一个数组,定义一个操作:选定一个数,将所有值等于这个数的数移动到数组的一端(数组头或者数组尾)。问将数组变成非递减序列最少需要多少操作次数。解题思路对于每一种数,我们记录他们......
  • 联想小新pro16 ubuntu18.04双系统、显卡驱动配置
    双系统安装注意了,所有的步骤都要按照这个链接来,跳过一步可能就出错了Ubuntu18.04安装教程每一步都有、多图卸载ubuntu方法一旦出错,先去计算机磁盘管理里面把ubuntu相关的区都给删掉,下面这个图不太清楚,主要就是上个链接中的四个区都格式化。然后,按照这个教程的第三步删除开......
  • C/C++航空客运订票管理系统[2023-06-16]
    C/C++航空客运订票管理系统[2023-06-16]用c++设计一个航空客运订票管理系统。系统功能要求如下:(1)查询航线:根据旅客提出的站名输出下列信息:航班号、飞机号、飞行日期(含详细时间段),余票量、已定票乘客的信息;(2)排序功能:根据不同属性对航线进行排序;(3)订票业务:根据客户提出的要求(航班......
  • 2023-06-16 《计算方法》- 陈丽娟 - 绪论.md
    2023-06-16《计算方法》-陈丽娟-绪论Matlab计算方法误差有效数字本章主要介绍计算方法的研究对象与特点,介绍误差的基本概念,并且提出在数值计算中应当普遍遵循的若干原则。最后附上习题答案。一、误差与有效数字误差可以分为:模型误差观测误差截断误差即用有限计算过......
  • 系统架构设计师笔记第16期:数据库基本概念
    数据库技术的发展数据库技术在过去几十年中经历了显著的发展和演变。层次数据库和网状数据库:20世纪60年代和70年代初,层次数据库和网状数据库是主流的数据库模型。层次数据库使用树状结构组织数据,而网状数据库使用复杂的网络结构。这些数据库模型适用于特定的数据组织和查询需求,但缺......
  • C/C++四则变量表达式计算[2023-06-16]
    C/C++四则变量表达式计算[2023-06-16]课程设计题一:四则变量表达式计算设计目的:1.掌握结构体的用法以及采用结构体定义线性表2.学会利用线性表保存变量名及其代入值3.理解堆栈在四则运算中的应用价值4.自学第五章字符串的基本操作并用于子串分割,实现更复杂的四则运算设计内......
  • C++《面向对象程序设计课程设计》[2023-06-16]
    C++《面向对象程序设计课程设计》[2023-06-16]《面向对象程序设计课程设计》任务书时间:班级:一分组和评分周一上午8:30作业布置周四5/6节开始,周五12点前检查,提问并打分;每人完成自己的课程设计报告,不能复制其他同学的报告内容,报告中主要说明自己在设计中所作的工作。......
  • 6/16 闲话
    最近搞了很多式子,合起来写一个东西推歌:シェーマ-Chinozo/v_flower歌词笑顔に花咲く君の目が夜の街にfadeoutAhfadeoutahfadeout見送る先には死者のcity分からないな世界血を流す覚悟を絡まっていた僕は最低だIdon'tsayNoをNoNoを自身のためそ......
  • 2023.6.15 08.数据库安全管理
    08.数据库安全管理⽤户账户管理访问权限系统访问权限回收在讨论安全时,我们需要考虑整个服务器主机安全(⽽不仅仅是MySQL服务)需要抵御攻击,窃听,扫描,破解等。MySQL对所有连接数据库⽤户进⾏了ACL访问控制,减少服务器被内部不规范操作导致故障。MySQL还⽀持客户端和......
  • 2023.6.15每日一题
    原题链接:A-CodeforcesRound666(Div.1)-CB-EducationalCodeforcesRound82(RatedforDiv.2)-CA.MonsterInvaders-2300题目大意在一款RPG当中,有两种类型的怪物,普通怪物血量为\(1\),boss的血量为\(2\)。我们有三种攻击手段:手枪,对一个怪物造成1点伤害,......