判定字符是否唯一

实现一个算法,确定一个字符串 s 的所有字符是否全都不同。假使不允许使用额外的数据结构,又该如何处理?

示例 1:

输入: s = "leetcode"
输出: false

示例 2:

输入: 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. 判断字符是否唯一相关推荐

  1. 【程序员面试金典】登峰造极--判定字符是否唯一

    面试题 01.01. 判定字符是否唯一 实现一个算法,确定一个字符串 s 的所有字符是否全都不同. 示例 1: 输入: s = "leetcode" 输出: false 示例 2: ...

  2. 程序员面试金典——1.1确定字符互异

    程序员面试金典--1.1确定字符互异 2018年4月7日从今天开始正式看<程序员面试金典> Solution1: 之前一直以为的这类题比较好的一种方法,但貌似还是不太符合题目要求的&quo ...

  3. 程序员面试金典——7.3判断直线相交

    程序员面试金典--7.3判断直线相交 Solution1:我的答案,虽然能AC,但不是很讲究,吸收教训 class CrossLine { public:bool checkCrossLine(dou ...

  4. 【程序员面试金典】 01.09. 字符串轮转

    题目链接:https://leetcode-cn.com/problems/string-rotation-lcci/ 思路如下: 从下图可以看出,s2.s3.s4 都可以由 s1 旋转而成. 我们将 ...

  5. 程序员面试金典面试题 01.06. 字符串压缩

    前言 本系列文章为<程序员面试金典>刷题笔记. 题目位置:字符串压缩 题集:程序员面试金典 题目 字符串压缩.利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能.比如,字符串a ...

  6. 【To Do!】程序员面试金典——18.8子串判断

    程序员面试金典--18.8子串判断 Solution1:我的答案 利用了C++ STL中自带的find函数,有点投机取巧的意思,正统方法是用trie树(单词查找树)来做,那就麻烦了许多 class S ...

  7. 程序员面试金典——17.4无判断max

    程序员面试金典--17.4无判断max 参考网址: https://www.nowcoder.com/practice/b0a82250677a4fabb0bc41053fa05013?tpId=8& ...

  8. 判断直线相交 牛客网 程序员面试金典

    判断直线相交 牛客网 程序员面试金典 题目描述 给定直角坐标系上的两条直线,确定这两条直线会不会相交. 线段以斜率和截距的形式给出,即double s1,double s2,double y1,dou ...

  9. 确定字符互异 牛客网 程序员面试金典 C++ Python

    确定字符互异 牛客网 程序员面试金典 C++ Python 题目描述 请实现一个算法,确定一个字符串的所有字符是否全都不同.这里我们要求不允许使用额外的存储结构. 给定一个string iniStri ...

最新文章

  1. 繁凡的ACM算法全家桶(全新的模板整合计划)
  2. 网络国际治理系列 | WTO电子商务谈判合并文本数据跨境流动部分
  3. java socket/Serversocket编程详解(中/英文)
  4. linux怎样自制库_linux 下动态链接库的制作与使用
  5. 自己实现多线程的socket,socketserver源码剖析
  6. 自己开发的ABAP代码版本查看工具
  7. 从零开始用好 Maven : 从 Hello World 到日常使用
  8. 在java中字符流怎么复制_Java 使用字符流拷贝数据
  9. checkbox怎么判断是否选中
  10. python电脑下载-python
  11. 增量同步_实战 | canal 实现Mysql到Elasticsearch实时增量同步
  12. pyzabbix 删除触发器_zabbix设置邮件报警, Zabbix常用Key值, zabbix触发器表达式详解, zabbix制作自己模板...
  13. Java | 原来 try 还可以这样用啊?!
  14. linux命令批量修改文件名称
  15. KingbaseES和PostgreSQL兼容
  16. 斯坦福NLP名课带学详解 | CS224n 第17讲 - 多任务学习(以问答系统为例)(NLP通关指南·完结)
  17. Python采集常用:谷歌浏览器驱动——Chromedriver 插件安装教程
  18. 做股权激励时,要不要进行绩效考核
  19. “安卓僵尸”变种木马
  20. python已知两条直角边求斜边,Python实现“已知三角形两个直角边,求斜边”

热门文章

  1. linux执行ksh文件,linux – shell脚本(KSH)将文件设置为param并在param和string之间执行测试...
  2. m4v视频如何转换mp4格式,简单操作一学就会
  3. 《延禧攻略》反派尔晴先“死”于越南
  4. python打印99乘法表的3种方式
  5. python常用api_python selenium API 常用方法
  6. vue中实现锚点定位平滑滚动
  7. 扇形统计图————微信小程序
  8. python编程人工智能小例子,python人工智能算法代码
  9. “讯飞星火”大模型计划10月底赶超ChatGPT
  10. SQL Server~函数