409. 最长回文串
问题描述
https://leetcode.cn/problems/longest-palindrome/description/
解题思路
这题被划分在了贪心tag下面。
贪心算法解题有个前提条件,就是说我们能够找到局部的最优解。然后将局部最优解组合起来,得到全局的最优解。
这个题目,明显可以用贪心来解决。因为回文串有个特性,如果回文串是偶数个长度,那其中出现过的所有字符必然都出现了偶数次。
如果回文串是奇数长度,那其中出现过1个单独出现的字符,其余的字符必然出现了偶数次。
所以我们开始求局部解,如果我们把所有字符都求到它最多的偶数次,加起来,就是全局解了。如果加起来之后还有落单的,那可以再+1,构造奇数次的解。
注意哈,这种在线处理的题目,需要进行边界处理。
代码
class Solution: def longestPalindrome(self, s: str) -> int: if len(s) < 2: return len(s) s = sorted(s) idx = 0 tmp = s[0] res = 0 while idx < len(s): t_idx = idx while idx < len(s) and s[idx] == tmp: idx += 1 if idx != t_idx: res += self.get_best(s[t_idx: idx])
# 边界处理 如果不能继续了,就不往下走了 if idx < len(s): tmp = s[idx] else: idx += 1 if res != len(s): res += 1 return res def get_best(self, s): return len(s) if len(s)%2 == 0 else len(s)-1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)