
3种解法 - 计算最长回文串
统计字符出现次数:我们可以使用字典(或哈希表)来统计每个字符的出现次数,或者使用固定长度的数组来提高效率。 处理字符出现次数:对于每个字符的出现次数,如果是偶数,则直接加到总长度中;如果是奇数,则只加其偶数部分(即减去1)。 判断是否存在奇数:如果有任何一个字符的出现次数是奇数,那么最长回文的长度可以增加1,因为中间可以多一个字符。
发布日期:2021-05-08 16:54:47
浏览次数:27
分类:精选文章
本文共 1472 字,大约阅读时间需要 4 分钟。
要解决这个问题,我们需要找到一个包含大写和小写字母的字符串中,可以通过这些字母构造的最长回文串。回文串的定义是正读和反读都一样的字符串,且大小写敏感。因此,我们需要仔细统计每个字符的出现次数,并利用这些次数来计算最长回文的长度。
方法思路
解决代码
以下是使用C#和Python两种语言的实现代码:
C# 实现
using System.Collections.Generic;public class Solution{ public int LongestPalindrome(string s) { Dictionarydict = new Dictionary (); foreach (char item in s) { if (dict.ContainsKey(item)) dict[item]++; else dict.Add(item, 1); } int cnt = 0; bool flag = false; foreach (int item in dict.Values) { if ((item & 1) == 1) { cnt += item - 1; flag = true; } else { cnt += item; } } if (flag) cnt += 1; return cnt; }}
Python 实现
import collectionsclass Solution: def longestPalindrome(self, s: str) -> int: cnt = sum([v - 1 if v % 2 == 1 else v for v in collections.Counter(s).values()]) return cnt + 1 if cnt < len(s) else cnt
代码解释
C# 实现:
- 使用
Dictionary<char, int>
来统计每个字符的出现次数。 - 遍历字符串,填充字典。
- 遍历字典中的值(字符出现次数),处理奇数和偶数,计算总长度。
- 如果存在奇数次数,总长度加1。
Python 实现:
- 使用
collections.Counter
统计字符出现次数。 - 计算每个字符出现次数的偶数部分的总和。
- 如果总和小于字符串长度,说明存在奇数次数,总长度加1。
这两种方法都能高效地解决问题,适用于不同编程环境。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年05月09日 09时50分01秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux 创建用户和工作组
2023-02-01
Linux 创建(删除)连接命令 ln -s 软连接
2023-02-01
Linux 利用lsof命令恢复删除的文件
2023-02-01
linux 单机版安装5.7
2023-02-01
Linux 卸载mysql-libs包出现问题如何解决
2023-02-01
Linux 压缩、解压和打包命令
2023-02-01
linux 发现交换文件 ".swp"
2023-02-01
Linux 命令
2023-02-01
linux 命令 - 磁盘管理命令 df
2023-02-01
Linux 命令中 find 和 xargs 命令的用法
2023-02-01
Linux 命令大全
2023-02-01
Linux 命令大全
2023-02-01
linux 命令拾遗
2023-02-01
linux 命令详解 十二
2023-02-01
Linux 命令集
2023-02-01
Linux 基本bash命令
2023-02-01
Linux 基金会与 RISC-V 基金会合作推广开源芯片
2023-02-01
linux 复制文件到当前目录
2023-02-01
linux 如何使用命令行隐藏特定进程和端口信息?一文教会你
2023-02-01