编写函数判断一个数是否是回文数_程序员面试金典 - 面试题 01.04. 回文排列

4bc253053c0e431b624356257a1f9f4f.png
题目难度: 简单
原题链接

题目描述

给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。

回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。

回文串不一定是字典当中的单词。

示例 1:

输入:"tactcoa" 输出:true(排列有"tacocat"、"atcocta",等等)

题目思考

  1. 什么字符串是回文串的排列?
  2. 能否做到常数空间复杂度?

解决方案

思路

  • 分析题目,输入不需要是回文串,只需要其某种排列满足回文串即可,所以我们可以从回文串的性质入手
  • 回文串有两种形式:一种是中间单独一个字符,两边对称;还有一种是最中间两个字符也对称。
  • 也就是说,回文串中最多只有一个字符的出现次数为 1,其他都必须为偶数
  • 所以我们可以使用一个计数字典来统计是否满足上述要求即可
  • 以上就是核心的思路,接下来我们考虑如何优化空间。这里我们无需知道精确的次数,而是只需要知道奇偶性,所以我们可以利用异或操作,这样就只需要一个变量而不需要字典了。具体做法如下:
  • 使用一个 mask + 字符的 ASCII 码来统计奇偶
  • 每次遍历一个字符就把对应位取异或
  • 这样最后如果 mask 上最多只有一个 1,则说明最多只有一个奇数次数的字符,满足题意
  • 这里判断是否最多有一个 1 可以复用统计 1 的个数的方法,即mask & (mask-1):如果它是 0,则说明要么 mask 本身是 0;要么 mask 是 2 的幂,一定只有一个 1

复杂度

  • 时间复杂度 O(N): 需要遍历字符串一遍
  • 空间复杂度: 使用计数字典 - O(N);使用位运算 - O(1)

代码

方案 1 - 计数字典

from collections import defaultdictclass Solution:def canPermutePalindrome(self, s: str) -> bool:# 方法1: 计数字典, 最多只能有一个字符计数为奇数d = defaultdict(int)for c in s:d[c] += 1# 判断次数为奇数的字符个数最多为1return sum(x & 1 for x in d.values()) <= 1

方案 2 - 异或位运算

class Solution:def canPermutePalindrome(self, s: str) -> bool:# 方法2: 位运算, 异或1<<ord, 最多只有一位是1才可以!mask = 0for c in s:mask ^= 1 << ord(c)return mask & (mask - 1) == 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289406.shtml

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

相关文章

ArcGIS地理坐标系与投影坐标系

地理坐标:为球面坐标。 参考平面地是 椭球面,坐标单位:经纬度 大地坐标:为平面坐标。参考平面地是 水平面,坐标单位:米、千米等 地理坐标转换到大地坐标的过程可理解为投影。

js去除重复数值

var c[2,4,3,5,2,2,2],a {},i 0;for(;i<c.length;i){a[c[i]] 1 //利用对象名称不能重复的特性来去重}c[];for(var g in a){c.push(g-0);}console.log(c);转载于:https://www.cnblogs.com/xupeiyu/p/4373871.html

ubuntu之sudo apt-get update提示Could not connect to 127.0.0.1:8081 (127.0.0.1)解决办法

1、问题 由于要使用Git,需要执行 sudo apt-get install git 但是执行之前我需要先 sudo apt-get update 麻痹的,当我执行这个的时候错误提示如下 Could not connect to 127.0.0.1:8081 (127.0.0.1). - connect (111: Connection refused)Err:1 http://archive.canonical…

Facebook为Messenger应用添加群组付款功能

Facebook在2015年为Messenger应用添加了好友免费转账功能。这个使得用户可以方便安全地向朋友转账&#xff0c;但是如果用户需要向多人支付&#xff0c;可能会耗费时间。幸运的是&#xff0c;Facebook已经通过其最新的Messenger应用更新解决了这个缺点。扩展付款功能现在允许用…

浙大计算机系可以转专业吗,求教。。浙大转专业容易吗

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼学长考试周忙里偷闲水一会儿贴吧&#xff0c;终于看到有人问这个问题了。作为一名即将跨入大二的浙江汉子&#xff0c;刚好符合你说的跨大类的条件。自我介绍一下&#xff0c;我前不久从理科大类跨到了社科大类(财管)。回想起一年前…

hfss史密斯图_HFSS仿真工程实例 (微波器件).ppt

HFSS仿真工程实例 (微波器件)(3)要结束观看时&#xff0c;可点击Close按钮。 图5-3-18 SolutionData收敛曲线   2)创建报告   ※创建差分对S参数绘图   (1)在AnsoftHFSS窗口中选择菜单项HFSS>Results>CreateReport。   (2)在创建报告(CreateReport)窗口做…

Xamarin.Forms 5.0 项目实战发布!

活动介绍本次活动主要是 .NET Xamarin.Forms 移动端项目开发实战教程, 与以往相同, 本次的收入(其它部分会另行说明) 将用于社区公益活动, 不限于:公益性质的个人/组织机构捐赠开源社区个人/项目捐赠内部投票活动本次的活动费用为:399元, 相对于去年组织的WPF公益实战视频而言,…

unity webgl读写txt文件_VB 读写txt文件

No.7 读写txt文件​mp.weixin.qq.com许多程序需要读写数据&#xff0c;比如商品管理&#xff0c;图书管理&#xff0c;学生档案等&#xff0c;当需要查询的时候&#xff0c;就是读取数据&#xff0c;新增或者更改就需要写数据&#xff0c;VB来讲&#xff0c;中小型的数据一般用…

Android studio导入项目提示The same input jar [*.jar] is specified twice

1 问题 把项目导入Android studio提示用gradle编译提示下面错误 The same input jar [*.jar] is specified twice 2 原因 gradle里面配置了 dependencies {api fileTree(dir: libs, include: *.jar) } 然后在混淆文件proguard.cfg里面进行了如下配置 -libraryjars ./li…

地图投影系列介绍(一)----地球空间模型

1、现实世界和坐标空间的联系 任何空间特征都表示为地球表面的一个特定位置,而位置依赖于既定的坐标系来表示。 通过统一的坐标系和高程系,可以使不同源的GIS数据叠加在一起显示,以及执行空间分析。 2、地球空间模型描述

python学习day2:类与对象

类与对象 一、内置函数 1、int方法&#xff08;1&#xff09;def__add__(self, y): #两数相加""" x.__add__(y) <> xy """ 例&#xff1a; 1 #!/usr/bin/env python 2 x8 3 resultx.__add__(9) 4 print(result) 输出…

Java Web整合开发(14) -- Struts 1.x 概述

整合Spring与Struts1的三种方法总结 无论用那种方法来整合&#xff0c;第一步就是要装载spring的应用环境&#xff0c;有三种方式&#xff1a; #1. struts-config.xml <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE struts-config PUBLIC &q…

WiFi行业将走向何方?

WiFi技术无处不在&#xff0c;人们很难想象&#xff0c;如果离开了无线网络&#xff0c;生活将会变成什么样子。随着配备全新、大流量数据应用软件的智能移动设备日益增加&#xff0c;越来越多的用户不仅用这些设备打电话&#xff0c;还用它们开展其他活动&#xff0c;这无疑大…

layui 数字步进器_图解全新奔驰S级:从“传统豪华”向“数字豪华”转型

全新奔驰S级的全球首发&#xff0c;中国这次也同步进行亮相。而且在全球首发之前的6个小时&#xff0c;就邀请了中国媒体提早进行品鉴。讲真&#xff0c;虽然之前我也不看好新S级&#xff0c;尤其是此前不知道在哪里泄露出来的图片&#xff0c;看着这台车的气场远不及W222来得强…

C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism

--概述这个项目演示了如何在WPF中使用各种Prism功能的示例。如果您刚刚开始使用Prism&#xff0c;建议您从第一个示例开始&#xff0c;按顺序从列表中开始。每个示例都基于前一个示例的概念。此项目平台框架&#xff1a;.NET Core 3.1Prism版本&#xff1a;8.0.0.1909提示&…

Android之Activity **** has leaked window android.widget.PopupWindow$PopupDecorView that was originall

1 问题 在页面实现了popupWindows,旋转屏幕的时候提示下面的错误 Activity **** has leaked window android.widget.PopupWindow$PopupDecorView that was originally added here 很明显,窗口内存泄漏,因为旋转屏幕的时候,依次会调用activity的onPause方法onStop方法onDestr…

地图投影系列介绍(二)----地理坐标系

3、地理坐标系 地球的形状与大小确定之后,还必须确定椭球体与大地水准面的相对关系,这项工作称为椭球定位与定向。与大地水准面符合得最好的一个地球椭球体,称为参考椭球体,是地球形体三级逼近。 说到这里,我们需要对这几个词汇做区分:

同一个工作组无法查看计算机,win7系统在同一个工作组看不到其他电脑的解决方法...

很多小伙伴都遇到过win7系统点击右键保存图片时没有另存为选项该的困惑吧&#xff0c;一些朋友看过网上零散的win7系统点击右键保存图片时没有另存为选项该的处理方法&#xff0c;并没有完完全全明白win7系统点击右键保存图片时没有另存为选项该是如何解决的&#xff0c;今天小…

bootstrap 开源框架demo_5 个接私活必备的 Java 开源项目!

公众号关注 “GitHubDaily”设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01;大家好&#xff0c;我是 Guide 哥&#xff0c;一个三观比主角还正的技术人。今天推荐几个 Java 项目快速开发脚手架&#xff0c;解放双手 ✋ 从现在开始。以下推荐项目都是码云上的优质项目&…

C#隐藏桌面图标和任务栏

最近因为项目需要需要实现桌面图标和任务状态栏的隐藏功能&#xff0c;实现的方式很多&#xff0c;比如修改注册表值&#xff0c;调用windows API函数等。经过一番的查阅&#xff0c;这个功能暂时实现了&#xff0c;或许不是很好的方法&#xff0c;但是我预期的效果达到了&…