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

【Python3】【力扣题】409. 最长回文串

【力扣题】题目描述:

(题意理解)统计如下:

① 字母个数本身是偶数。

② 字母个数是奇数,统计奇数中的偶数部分,例如:字母个数为3,统计其中的2。

③ 中间可以有一个奇数字母。即只要有奇数,不论多少奇数,最终总和再加一个1。

【Python3】代码:

解题思路:先统计出各字符总共出现次数,加和偶数部分(包括奇数的偶数部分),若有奇数最后再加1。用变量isodd记录是否有奇数。

知识点:{ }:空字典。字典:键值对的序列。

              字典[键]:获取或修改键对应的值。

             字典.values():返回字典中所有值。

             b % 2 == 0:判断数值是否为偶数。

class Solution:def longestPalindrome(self, s: str) -> int:# 遍历字符串中每个字符,用字典统计出现个数adict = {}for a in s:if a not in adict: adict[a] = 1 else: adict[a] += 1# 遍历字典的所有值,所有偶数加和(含奇数的偶数部分)isodd = 0      # 用于记录是否有奇数total = 0for b in adict.values():if b % 2 == 0: total += belse: total += b - 1isodd = 1# 最多一个奇数在中间,若有奇数最后再加1return total + 1 if isodd == 1 else total

可以在用字典统计个数时,加总偶数,最后总和小于字符串长度,则表示有奇数,最后加1。

class Solution:def longestPalindrome(self, s: str) -> int:# 遍历字符串所有字符,用字典统计个数,统计到偶数个,加入总和,字典中恢复为0total = 0adict = {}for a in s:if a not in adict: adict[a] = 1 else: adict[a] += 1# 若个数是偶数即2,则总和+2,字典中对应值恢复为0if adict[a] % 2 == 0:total += 2adict[a] = 0# 若总和小于字符串长度(即有奇数),则总和加1return total + 1 if total < len(s) else total

python的collections库中Counter类可直接统计各元素出现个数。类似字典。

class Solution:def longestPalindrome(self, s: str) -> int:# 统计各字母出现次数adict = collections.Counter(s)# 遍历各字母的个数,偶数部分加和total = 0for b in adict.values():if b % 2 == 0: total += belse: total += b - 1# 若有奇数,最后总和加1return total + 1 if total < len(s) else total 

(官方题解)贪心

统计各字母出现次数,遍历各字母个数,加总偶数部分,若有奇数只加一次1。

知识点: b // 2:除法取整。例如:3 // 2 = 1。

                b % 2 == 1:判断数值是否是奇数。

class Solution:def longestPalindrome(self, s: str) -> int:# 统计各字母出现次数adict = collections.Counter(s)# 遍历各字母个数,偶数部分加和,若有奇数且总和为偶数则加1total = 0for b in adict.values():total += b // 2 * 2# 字母个数为奇数,总和为偶数,即确保只有一个奇数在中间位置if b % 2 == 1 and total % 2 == 0:total += 1return total


http://www.mrgr.cn/news/63458.html

相关文章:

  • Ubuntu 开通 SSH 连接方式指南
  • CesiumJS 案例 P16:标记平移、删除标记、隐藏与显示标记、标记颜色
  • 视频设备一体化监控运维方案
  • Python编程风格:深入了解Lambda表达式
  • 深入解析Sysmon日志:增强网络安全与威胁应对的关键一环
  • 【Mac】Python 环境管理工具
  • 小程序与服务器通信webSocket和UDPSocket
  • 【前端】强制刷新、清空缓存
  • React中常用的hook函数(二)——useReducer和useContext
  • C++11之新特性 --- function包装器与lambda表达式
  • AI直播带货场景切换模块的搭建!
  • 第14课 异常处理
  • 沙盒正在源代码防泄漏行业盛行
  • 【MySQL系列】理解 `utf8mb4` 和 `utf8mb4_unicode_ci`
  • ABAP OOALV
  • 如何打造美颜功能的视频平台?美颜SDK的开发与应用详解
  • 软件测试·用例设计都有哪些设计方法?这些设计方法适用于什么场景?
  • openGauss在银河麒麟V10 ARM平台编译安装(一)
  • 关于三色标记算法的理解
  • Git 子模块初始化和管理
  • 【Python游戏开发】猜数字游戏
  • Anolis(龙蜥)系统介绍
  • Linux中部署PostgreSQL保姆级教程
  • 二叉树算法题
  • 数据泄露后的安全重构:文件安全再思考
  • Java-实现重试机制并防止短时间内多次尝试