欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > leetcode_字符串 409. 最长回文串

leetcode_字符串 409. 最长回文串

2025/3/16 20:25:11 来源:https://blog.csdn.net/aKainRe/article/details/145312218  浏览:    关键词: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  # 否则,将该字符添加到字典,并初始化计数为 1res = 0# res 用来存储可以用于构成回文串的字符数odd = 0# odd 用来标记是否有一个字符可以放在回文的中心for i in dic.values():# 遍历字典dic中存储的每个字符的频率irem = 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来存储字符的频率)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词