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
复制代码

 

posted @   BJFU-VTH  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示