码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 码蹄集 - MT3251 - 多重回文


    传送门

      • 多重回文:我觉得这道题“子串”不合适
        • 题目描述
        • 输入描述
          • 数据范围
        • 输出描述
        • 样例一
          • 输入
          • 输出
    • 题目分析
    • AC代码


    多重回文:我觉得这道题“子串”不合适

    • 多重回文 .

    时间限制:1秒
    空间限制:128M


    题目描述

    小码哥最近在研究字符串,如果一个字符串可以被划分为同时满足以下条件的若干个连续的字串,他就称该串为“多重回文串”:

    1.每个字符都被划分进恰好一个子串中
    2.每个子串都是长度不小于 22 的回文串

    现在给出一个字符串 ss,请问能否通过对 ss 中的字符重新排列,使其成为一个“多重回文串”?


    输入描述

    输入一行,一个字符串 s s s,满足 ∣ s ∣ ∈ [ 1 , 2 × 1 0 5 ] |s|\in[1,2\times 10^5] ∣s∣∈[1,2×105],保证所有字符均为小写字母。

    数据范围

    无


    输出描述

    输出一行,YES 或 NO。


    样例一

    输入

    aeoooamlml
    
    • 1

    输出

    YES
    
    • 1

    样例中的字符串可以重新排列为 aoooa mem ll,满足“多重回文串”的定义。

    题目分析

    “子串”应该是连续的,并且顺序也不能改变。

    这道题字母就完全重组了,只要求每个字母恰好使用一次。

    既然题目不要求顺序,那么就好说了,直接所有的字母拿出来,想怎么用就怎么用。

    如果要组成回文串,那么前后必须对称。

    相同的字母好处理,直接自己就能前后对称。

    但是“落单”的字母就需要被“相同”的字母前后夹着(因为题目要求回文串的长度至少为 2 2 2)

    因此,问题就转化为了:是否有足够的“相同字母对”,能把“落单的字母”夹在中间。

    只需要遍历一遍字符串,统计每个字母出现的次数。

    之后遍历 26 26 26个字母,把能成对的全部成对,落单的单着。

    然后比较“成对”的对数和“落单”的单数哪个大 就可以了。

    AC代码

    /*
     * @Author: LetMeFly
     * @Date: 2022-08-21 13:11:13
     * @LastEditors: LetMeFly
     * @LastEditTime: 2022-08-21 13:42:28
     */
    #include 
    using namespace std;
    #define mem(a) memset(a, 0, sizeof(a))
    #define dbg(x) cout << #x << " = " << x << endl
    #define fi(i, l, r) for (int i = l; i < r; i++)
    #define cd(a) scanf("%d", &a)
    typedef long long ll;
    
    int bin[26] = {0};
    
    int main() {
        string s;
        cin >> s;
        for (char& c : s) {  // 遍历字符串统计每个字母出现的次数
            bin[c - 'a']++;
        }
        int cntOdd = 0, cntEven = 0;
        for (int i = 0; i < 26; i++) {  // 遍历26个字母,统计“成对”、“落单”的字母(对)的个数
            if (bin[i]) {
                if (bin[i] % 2) {  // 这个字母总共出现了奇数次,有一个落单的前提下其他的字母都能成对
                    bin[i]--;
                    cntOdd++;
                }
                cntEven += bin[i] / 2;  // 两个字母是一对
            }
        }
        puts(cntEven >= cntOdd ? "YES" : "NO");  // 成对的夹着落单的
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    虽然代码可以复制,但最好还是自己理解后再敲哦

    原创不易,转载请附上原文链接哦~
    Tisfy:https://letmefly.blog.csdn.net/article/details/126459839

  • 相关阅读:
    【环境栏Composer】Composer常见问题(持续更新)
    轻量级神经网络算法-总结对比
    【OpenCV】Chapter10.色彩转换与图像绘制
    Vue3 - 事件 API 新标准(如何在 Vue3 中怎么用事件总线实现兄弟组件通信?相比 Vue2 有什么不同?)
    机械人必须要知道的多轴滑台模组应用
    MySQL进阶
    工程师每日刷题-7
    React之组件定义和事件处理
    一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
    STM32MP157汇编流水灯
  • 原文地址:https://blog.csdn.net/Tisfy/article/details/126459839
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号