【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.mzph.cn/diannao/59569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scala的属性访问权限(一)默认访问权限

//eg:银行账户存钱取钱 // 账户类&#xff1a; // -balance() 余额 // -deposit() 存钱 // -withdraw() 取钱 // -transfer(to:账户,amount:Dobule)转账 package Test1104 //银行账户class BankAccount(private var balance:Int){def showMoney():Unit {println(s"…

作为一个前端开发者 以什么步骤学习后端技术

作为一个前端开发者&#xff0c;学习后端技术可以按照以下步骤进行&#xff1a; 明确学习目标 确定方向&#xff1a;明确自己想学习的后端技术栈&#xff08;如Node.js、Python、Java等&#xff09;。 设定目标&#xff1a;短期目标&#xff08;如完成一个简单的后端项目&…

mit6824-06-Raft学习记录01

文章目录 必要知识单点故障脑裂多数原则 近日开始学习分布式共识算法Raft&#xff0c;慢慢记录一些自己能看懂的东西。 优质博客&#xff1a; Raft原理详解 必要知识 单点故障 单点故障&#xff08;single point of failure&#xff09;&#xff1a;服务器中某台机器出现故…

010 Editor下载安装和使用

010 Editor下载安装和使用 010 Editor&#xff08;也称为 SweetScape 010 Editor&#xff09;是一款功能强大的二进制文件编辑器和文本编辑器。它主要用于查看、编辑和分析各种二进制文件和文本文件&#xff0c;特别适用于处理数据恢复、磁盘编辑、编程和系统管理等领域。 1 …

每日一练 | DHCP Relay(DHCP 中继)

01 真题题目 DHCP Relay 又称为 DHCP 中继&#xff0c;下列关于 DHCP Relay 的说法正确的是&#xff08;多选&#xff09;&#xff1a; A. DHCP 协议多采用广播报文&#xff0c;如果出现多个子网则无法穿越&#xff0c;所以需要 DHCP Relay 设备。 B. DHCP Relay 一定是一台交…

【安装教程】统信UOS1070上使用vsftpd服务上传下载文件

原文链接&#xff1a;【安装教程】统信UOS1070上使用vsftpd服务上传下载文件 Hello&#xff0c;大家好啊&#xff01;今天带来一篇关于在统信UOS 1070上使用vsftpd服务实现加密文件上传和下载的文章。默认的FTP传输是不加密的&#xff0c;但在数据传输时&#xff0c;安全性尤为…

Linux之实战命令70:chcon应用实例(一百零四)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

99.9%高质量Tick数据复盘回测ea必备工具:Tick Data Suite 使用教程

Tick Data Suite 是一款高质量的99.9% Tick 数据回测工具&#xff0c;功能强大&#xff0c;适用于进行EA回测。它具有以下主要优势&#xff1a;Tick 数据占用硬盘空间较小&#xff0c;可模拟滑点和实盘延时&#xff0c;还能设置持仓过夜费和交易手续费。Tick 数据来源多样&…

算法练习:1004. 最大连续1的个数 III

题目链接&#xff1a;1004. 最大连续1的个数 III。 题目要求&#xff0c;给定一个数组&#xff0c;这个数组里面只有0或1&#xff0c;然后计算有多少个连续的1的最大长度&#xff0c;同时给了一个条件就是&#xff0c;可以把k个0变成1&#xff0c;然后来计算长度。 暴力解法&a…

Unity网络开发基础(part5.网络协议)

目录 前言 网络协议概述 OSI模型 OSI模型的规则 第一部分 物理层 数据链路层 网络层 传输层 第二部分 ​编辑 应用层 表示层 会话层 每层的职能 TCP/IP协议 TCP/IP协议的规则 TCP/IP协议每层的职能 TCP/IP协议中的重要协议 TCP协议 三次握手 四次挥手 U…

SQL,力扣题目1767,寻找没有被执行的任务对【递归】

一、力扣链接 LeetCode_1767 二、题目描述 表&#xff1a;Tasks ------------------------- | Column Name | Type | ------------------------- | task_id | int | | subtasks_count | int | ------------------------- task_id 具有唯一值的列。 ta…

JavasScript 的对象事件的处理程序

1、鼠标事件 常用的鼠标事件有MouseDown、MouseUp、MouseMove、MouseOver、MouseOut、Click、Blur及Focus等事件。 mousedown&#xff1a;按下鼠标键时触发 mouseup&#xff1a;抬起鼠标键时触发 click&#xff1a;单击鼠标时触发 dblclick&#xff1a;在同一个元素上双击鼠标…

华为云安装docker

docker_docker-compose_install: 代替官网的一键安装脚本&#xff0c;使用docker包进行离线安装 bash <(curl -sL https://raw.githubusercontent.com/1scripts/docker_docker-compose_install/main/quick_install.sh) 华为镜像&#xff1a; https://console.huaweicloud.…

如何实用穿山甲APP搭建你的广告联盟?

在当下蓬勃兴盛的移动互联网范畴&#xff0c;广告联盟穿山甲无疑堪称一个具备深远影响力的关键平台。它系由在科技领域声名远扬的字节跳动悉心打造并予以推出&#xff0c;其创建的初衷便是矢志为众多的开发者和广告主精心构筑一个高效能、精准化且极具价值的广告投放与变现服务…

【Python实战案例】爬虫项目实例(附赠源码)

文章目录 声明安装必要的库项目结构技术细节小结 声明 请您遵守网站的robots文件规定&#xff0c;本文目的只是做学习交流使用&#xff0c;包括多个模块&#xff0c;例如数据存储、日志记录、错误处理、多线程或异步请求 安装必要的库 pip install requests beautifulsoup4 sq…

PL/SQL developer debug 方法及存储过程等

文章目录 打开 PL/SQL&#xff0c;找到 fun右键 fun&#xff0c;选择【添加调试信息(U)】右键 fun&#xff0c;选择【查看(O)】在 fun 中需要调试的位置打上断点右键 fun&#xff0c;选择【测试(X)】点击执行再点击执行进入断点 执行结果 打开 PL/SQL&#xff0c;找到 fun 右键…

[python] 如何debug python脚本中C++后端的core dump

文章目录 Debug过程Reference Debug过程 另外&#xff1a;对于core dump: gdb版本是>7&#xff0c;gdb从版本7开始支持对Python的debug。确保你的系统中安装了 GDB 调试器和对应版本的 Python 调试信息包&#xff08;例如 python-dbg 或 python-debuginfo&#xff09;。 #…

51单片机 定时器详解

51单片机定时器详解 在 51 单片机中&#xff0c;定时器/计数器&#xff08;Timer/Counter&#xff09;是一个非常重要的功能模块&#xff0c;用于处理定时、计数和事件触发等任务。定时器可以在应用程序中产生周期性中断&#xff0c;常用于精确的时间延迟、事件计数等场合。本…

利用 Avalonia UI 构建 Blazor 混合应用程序

Blazor 是一个 .NET 前端框架&#xff0c;用于仅使用 .NET 技术构建 Web 应用程序。2021 年&#xff0c;Blazor 扩展到桌面端&#xff0c;推出了 Blazor Hybrid&#xff08;混合&#xff09;&#xff0c;使开发者可以在桌面平台上使用已有的技能。 Blazor 混合应用程序是传统的…

为什么要学习 Java 编程

1991 年&#xff0c;Sun Microsystems 创造了历史。 当时的目标是设计一种用于电视机顶盒的编程语言。 James Gosling&#xff08;Java 之父&#xff09;本人可能从未预料到&#xff0c;他即将为 IT 行业的未来奠定基础。 Java 以其简洁易读的代码形式和复杂的面向对象编程语…