首页 > 其他分享 >leedcode-最长回文串

leedcode-最长回文串

时间:2024-04-24 22:11:06浏览次数:15  
标签:count 字符 hash even leedcode evenli 最长 回文

自己写的:

class Solution:
    def longestPalindrome(self, s: str) -> int:
        count = 0  # 用于计算最长回文串的长度
        hash = {}  # 用于统计每个字符出现的次数的字典
        # 统计每个字符出现的次数
        for i in s:
            if not hash.get(i):
                hash[i] = 1
            else:
                hash[i] += 1
        
        oddli = []  # 存储出现奇数次的字符的列表
        evenli = []  # 存储出现偶数次的字符的列表
        
        # 将出现奇数次和偶数次的字符分别存储到对应的列表中
        for k, v in hash.items():
            if v % 2 == 0:
                evenli.append(v)
            else:
                oddli.append(v)
        
        oddlen = len(oddli)  # 计算出现奇数次的字符的个数
        
        # 如果没有出现奇数次的字符,则所有字符都可以用于构成回文串,直接返回字符串长度
        if oddlen == 0:
            for even in evenli:
                count += even
            return count
        # 如果只有一个出现奇数次的字符,则这个字符可以放在回文串的中间,其余字符都是偶数次出现,直接返回计算长度
        elif oddlen == 1:
            for even in evenli:
                count += even
            count += oddli[0]
            return count
        # 如果有多个出现奇数次的字符,则将其中偶数个字符的数量-1加入回文串,最后再加一个出现奇数次的字符作为中心
        else:
            for even in evenli:
                count += even
            for odd in oddli:
                count += odd - 1
            return count + 1

 

标签:count,字符,hash,even,leedcode,evenli,最长,回文
From: https://www.cnblogs.com/yyyjw/p/18156492

相关文章

  • 「洛谷」题解:P1217 回文质数
    题目传送门看着题目好像很简单的样子,实际上做起来才会发现,这么多函数他奶奶的是普及-难度?在这道题目当中,我们最少需要写两个函数,如果需要优化可以再多写一个,待会儿的代码我们就直接放最简单版本的了。有人说这道题可以暴力对拍之后再输出,这完全可以,但是这么简单的题目不至于使用......
  • 14. 最长公共前缀
    题目链接:实现一、\(\rmTrie\)求多串的最长公共前缀,首先想到\(\rmTrie\)。classSolution{public:staticconstintN=210;intch[N][26],idx,cnt[N];voidinsert(strings){intp=0;for(inti=0;i<s.size();i++){......
  • leedcode-数字转换为十六进制数
    自己写的,先整数转二进制,再切片二进制转16进制classSolution:deftoHex(self,num:int)->str:#处理特殊情况:当num为0时,直接返回'0'ifnum==0:return'0'#定义十六进制字母的映射关系my_dict={10:......
  • leedcode-左叶子之和
    自己写的,使用了经典的广度优先搜素(BFS):classSolution:defsumOfLeftLeaves(self,root:Optional[TreeNode])->int:#初始化队列,将根节点放入队列中queue=[root]#初始化结果变量res=0#遍历队列,直到队列为空......
  • 回文自动机
    求以每个节点结尾的,回文子串的个数,最大回文子串的长度求回文串的总个数(必须连续)不连续的是动态规划#include<bits/stdc++.h>usingnamespacestd;constintmaxn=500005;charstr[maxn];structPAM{intsize,last,r0,r1;inttrie[maxn][26],fail[maxn],l......
  • 最长公共子序列(局限性)(LCS)问题
    先来个朴素dp算法!见代码注释点击查看代码//原理:dp//时间复杂度:o(n^2),过不了本题#include<bits/stdc++.h>usingnamespacestd;intf[1001][1001];//dp数组,f[i][j]为处理了a的前i位,b的前j位得到的最长公共子序列inta[1001];intb[1001];intmain(){ios::sy......
  • 2024-04-21---真题--一个字符串中的最长重复子串(滑动窗口变种)
    真题-一个字符串中的最长重复子串(滑动窗口变种)题目:思路:首先这不是求公共子串,所以不需要动态规划记录。然后一个string相当于就是一个Char[],所以直接滑动窗口来枚举最好做。说白了,这道题就是求abc|abc的问题。其实就是可以看作是一个大的滑动窗口(包含两个小的窗口),并且大的窗口......
  • Bingbong的回文路径
    Bingbong的回文路径题目描述Bingbong有一棵有根树,根节点为$1$,总共有$n$个节点。树中的节点通过$n−1$条无向边相连,每条边的权重为$1$。树中的每个节点包含一个小写字母。Bingbong将选择从节点$u$开始,并在选择最短路径的情况下到达节点$v$。他想知道他所走路径形成的......
  • leetcode回文数
    给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121是回文,而123不是。示例1:输入:x=121输出:true示例2:输入:x=-121输出:false解释:从左向右读,为-121。从右向左读,为121-。因此......
  • leedcode-二进制手表
    自己写的,调用了combinations函数:fromitertoolsimportcombinationsfromtypingimportListclassSolution:defreadBinaryWatch(self,turnedOn:int)->List[str]:#可以表示小时的LED灯,对应的值分别是1,2,4,8hour_list=[1,2,4,8]#......