当前位置: 首页 > article >正文

leetcode_字符串 409. 最长回文串

409. 最长回文串

  • 给定一个包含大写字母和小写字母的字符串 s ,返回通过这些字母构造成的最长的回文串的长度。

  • 在构造过程中,请注意 区分大小写 。比如 “Aa” 不能当做一个回文字符串。

  • 回文串‌是指一个字符串从前向后读和从后向前读都是相同的。例如,“level”和“noon”都是回文串。

  • 思路:

    1. 首先计算字符串中每个字符的频率。
    2. 如果一个字符的频率是偶数,则这些字符都可以用于构建回文。
    3. 如果字符的频率是奇数,则只能用其中的偶数部分来构建回文,剩余的一个字符可能会放在回文的中心(如果没有其他中心字符的话)。
# from collections import Counter
def func(s):
    if not s:
        return False
    # 创建字典来统计字符出现的频率
    dic = {}

    # 统计字符的频率
    # 也可以用dic = Counter(s) 
    for char in s:
        if char in dic:
            dic[char] += 1
            # 如果字符已在字典中,增加计数
        else:
            dic[char] = 1  
            # 否则,将该字符添加到字典,并初始化计数为 1
    res = 0
    # res 用来存储可以用于构成回文串的字符数
    odd = 0
    # odd 用来标记是否有一个字符可以放在回文的中心
    for i in dic.values():
        # 遍历字典dic中存储的每个字符的频率i
        rem = i % 2
        # 如果 i 是偶数,i % 2 == 0,那么可以直接将所有的 i 个字符加入到回文串中
        # 如果 i 是奇数,i % 2 == 1,那么只能取 i-1 个字符(即把奇数个字符中的偶数部分用作回文串的一部分),剩下的一个字符放在回文串的中间
        res += i - rem
        # res += i - rem 将频率 i 中的偶数部分加入到结果中(i - rem 就是偶数部分)
        
        if rem == 1: 
            odd = 1
            # 如果某个字符的频率是奇数(即 rem == 1),则 odd = 1,表示回文串中间可以有一个字符
    return res + odd
  • 时间复杂度: O(n)
    • 统计字符频率:O(n)
    • 计算回文串的最大长度:O(n)
  • 空间复杂度: O(n)(创建了dic来存储字符的频率)

http://www.kler.cn/a/515240.html

相关文章:

  • idea新增java快捷键代码片段
  • c++常见设计模式之装饰器模式
  • 再见 Crontab!Linux 定时任务的新选择!
  • 高效安全文件传输新选择!群晖NAS如何实现无公网IP下的SFTP远程连接
  • 【机器学习实战中阶】使用SARIMAX,ARIMA预测比特币价格,时间序列预测
  • 【C++】在线五子棋对战项目网页版
  • 什么是IP地址、子网掩码、网关、DNS
  • AI刷题-策略大师:小I与小W的数字猜谜挑战
  • Matlab 亥姆霍兹谐振器的吸声特性
  • 【机器学习应用】预处理与特征工程
  • 【PCL】Segmentation 模块—— 条件欧几里得聚类(Conditional Euclidean Clustering)
  • Redis vs. 其他数据库:深度解析,如何选择最适合的数据库?
  • cuda + cudnn安装
  • C语言 指针_野指针 指针运算
  • 【AI日志分析】基于机器学习的异常检测:告别传统规则的智能进阶
  • 算法7(力扣141)-循环链表
  • 固件测试工具选型需要考察的功能点汇总
  • springboot设置多环境配置文件
  • 【2024年 CSDN博客之星】我的2024年创作之旅:从C语言到人工智能,个人成长与突破的全景回顾
  • 【Python】面对对象超全总结:封装,继承,多态
  • 修改word的作者 最后一次保存者 总编辑时间 创建时间 最后一次保存的日期
  • 白玉微瑕:闲谈 SwiftUI 过渡(Transition)动画的“口是心非”(下)
  • 无人机 PX4 飞控 | PX4源码添加自定义参数方法并用QGC显示与调整
  • 使用EVE-NG-锐捷实现静态路由
  • jvm_threads_live_threads 和 jvm_threads_states_threads 这两个指标之间存在一定的关系,但它们关注的维度不同
  • 【Go面试】工作经验篇 (持续整合)