【程序员面试金典】01.01. 判断字符是否唯一
判定字符是否唯一
实现一个算法,确定一个字符串 s
的所有字符是否全都不同。假使不允许使用额外的数据结构,又该如何处理?
输入: s = "leetcode"
输出: false
输入: s = "abc"
输出: true
题目解法1
构建一个布尔值的数组,索引值i对应的标记指示该字符串是否含有字母表第i个字符。若这个字符第二次出现,则立即返回false(假设此处为标准ASCII字符集,128个字符)。
算法实现:
class Solution {/*** 字母表长度*/private static final int CHARACTER_SIZE = 128;public boolean isUnique(String astr) {boolean[] characters = new boolean[CHARACTER_SIZE];for (int i = 0; i < astr.length(); i++) {int val = astr.charAt(i);if (characters[val]) {return false;}characters[val] = true;}return true;}
}
题目解法2
使用位向量(bit vector)可以将空间占用减少为原先的1/8。下面的代码假设字符串只含有小写字母a到z。这样以来只需要使用一个int型(32位)变量来标记指示该字符串是否含有字母表第i个字符。
算法实现:
class Solution {public boolean isUnique(String astr) {int checker = 0;for (int i = 0; i < astr.length(); i++) {int val = astr.charAt(i) - 'a';if ((checker & (1 << val)) > 0) {return false;}checker |= (1 << val);}return true;}
}
参考文献:
[1]盖尔.拉克曼.麦克道尔.程序员面试金典(第6版)[M].北京:人民邮电出版社,2019.9:156-157
【程序员面试金典】01.01. 判断字符是否唯一相关推荐
- 【程序员面试金典】登峰造极--判定字符是否唯一
面试题 01.01. 判定字符是否唯一 实现一个算法,确定一个字符串 s 的所有字符是否全都不同. 示例 1: 输入: s = "leetcode" 输出: false 示例 2: ...
- 程序员面试金典——1.1确定字符互异
程序员面试金典--1.1确定字符互异 2018年4月7日从今天开始正式看<程序员面试金典> Solution1: 之前一直以为的这类题比较好的一种方法,但貌似还是不太符合题目要求的&quo ...
- 程序员面试金典——7.3判断直线相交
程序员面试金典--7.3判断直线相交 Solution1:我的答案,虽然能AC,但不是很讲究,吸收教训 class CrossLine { public:bool checkCrossLine(dou ...
- 【程序员面试金典】 01.09. 字符串轮转
题目链接:https://leetcode-cn.com/problems/string-rotation-lcci/ 思路如下: 从下图可以看出,s2.s3.s4 都可以由 s1 旋转而成. 我们将 ...
- 程序员面试金典面试题 01.06. 字符串压缩
前言 本系列文章为<程序员面试金典>刷题笔记. 题目位置:字符串压缩 题集:程序员面试金典 题目 字符串压缩.利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能.比如,字符串a ...
- 【To Do!】程序员面试金典——18.8子串判断
程序员面试金典--18.8子串判断 Solution1:我的答案 利用了C++ STL中自带的find函数,有点投机取巧的意思,正统方法是用trie树(单词查找树)来做,那就麻烦了许多 class S ...
- 程序员面试金典——17.4无判断max
程序员面试金典--17.4无判断max 参考网址: https://www.nowcoder.com/practice/b0a82250677a4fabb0bc41053fa05013?tpId=8& ...
- 判断直线相交 牛客网 程序员面试金典
判断直线相交 牛客网 程序员面试金典 题目描述 给定直角坐标系上的两条直线,确定这两条直线会不会相交. 线段以斜率和截距的形式给出,即double s1,double s2,double y1,dou ...
- 确定字符互异 牛客网 程序员面试金典 C++ Python
确定字符互异 牛客网 程序员面试金典 C++ Python 题目描述 请实现一个算法,确定一个字符串的所有字符是否全都不同.这里我们要求不允许使用额外的存储结构. 给定一个string iniStri ...
最新文章
- 繁凡的ACM算法全家桶(全新的模板整合计划)
- 网络国际治理系列 | WTO电子商务谈判合并文本数据跨境流动部分
- java socket/Serversocket编程详解(中/英文)
- linux怎样自制库_linux 下动态链接库的制作与使用
- 自己实现多线程的socket,socketserver源码剖析
- 自己开发的ABAP代码版本查看工具
- 从零开始用好 Maven : 从 Hello World 到日常使用
- 在java中字符流怎么复制_Java 使用字符流拷贝数据
- checkbox怎么判断是否选中
- python电脑下载-python
- 增量同步_实战 | canal 实现Mysql到Elasticsearch实时增量同步
- pyzabbix 删除触发器_zabbix设置邮件报警, Zabbix常用Key值, zabbix触发器表达式详解, zabbix制作自己模板...
- Java | 原来 try 还可以这样用啊?!
- linux命令批量修改文件名称
- KingbaseES和PostgreSQL兼容
- 斯坦福NLP名课带学详解 | CS224n 第17讲 - 多任务学习(以问答系统为例)(NLP通关指南·完结)
- Python采集常用:谷歌浏览器驱动——Chromedriver 插件安装教程
- 做股权激励时,要不要进行绩效考核
- “安卓僵尸”变种木马
- python已知两条直角边求斜边,Python实现“已知三角形两个直角边,求斜边”
热门文章
- linux执行ksh文件,linux – shell脚本(KSH)将文件设置为param并在param和string之间执行测试...
- m4v视频如何转换mp4格式,简单操作一学就会
- 《延禧攻略》反派尔晴先“死”于越南
- python打印99乘法表的3种方式
- python常用api_python selenium API 常用方法
- vue中实现锚点定位平滑滚动
- 扇形统计图————微信小程序
- python编程人工智能小例子,python人工智能算法代码
- “讯飞星火”大模型计划10月底赶超ChatGPT
- SQL Server~函数