【Leetcode 程序员面试金典 01.01】判定字符是否唯一 —— 位运算|哈希表

简介: 可以使用哈希表或位运算来解决此问题:由题可知s[i]仅包含小写字母,int[26]即能表示字符的出现次数;

面试题 01.01 判定字符是否唯一

实现一个算法,确定一个字符串s的所有字符是否全都不同。

示例 1:

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

示例 2:

输入: s = "abc"
输出: TRUE

限制:

  • 0 <= len(s) <= 100
  • s[i]仅包含小写字母
  • 如果你不使用额外的数据结构,会很加分。

题目分析

哈希表

由题可知:s[i] 仅包含小写字母,故可以使用int[26]来标识 a-z 的出现次数,看是否存在相同字符

/**
 * 哈希表
 * @param astr
 * @return
 */
public boolean isUnique(String astr) {
   
    int[] tmp = new int[26];
    char[] chars = astr.toCharArray();
    for(char c : chars){
   
        if(tmp[c - 'a'] != 0){
   
            return false;
        }
        tmp[c - 'a']++;
    }
    return true;
}

位运算

由题可知:s[i] 仅包含小写字母,在 ASCII 码中,英文小写字母的序号范围是 97 到 122

  • 1L << 0 即为 a 字符存储位置
  • 1L << 25 即为 z 字符存储位置

算法思路:

  • i & (1 << k)用于判断 i 的第 k 位数字是否为 0;实际上和数组或哈希表记录相似,相当于nums[k]
  • i | (1 << k)用于将 i 的第 k 位数字赋值为 1, 相当于 nums[k] = 1
public boolean isUnique(String astr) {
   
    int tmp = 0;
    for (char k : astr.toCharArray()) {
   
        int bitIndex = 1 << (k - 97);
        if ((tmp & bitIndex) != 0) {
   
            return false;
        }
        tmp |= bitIndex;
    }
    return true;
}
相关文章
|
2月前
|
算法 程序员 Go
PHP 程序员学会了 Go 语言就能唬住面试官吗?
【9月更文挑战第8天】学会Go语言可提升PHP程序员的面试印象,但不足以 solely “唬住” 面试官。学习新语言能展现学习能力、拓宽技术视野,并增加就业机会。然而,实际项目经验、深入理解语言特性和综合能力更为关键。全面展示这些方面才能真正提升面试成功率。
57 10
|
3月前
|
JavaScript 前端开发 小程序
CoderGuide 程序员前后端面试题库,打造全网最高质量题库
CoderGuide涵盖范围包括且不限于:前端面试题(Vue,React,JS,HTTP,HTML,CSS面试题等),后端面试题(Java,Python,Golang,PHP,Linux,Mysql面试题等),以及算法面试题,大厂面试题,高频面试题,校招面试题等,你想要的,这里都有!
67 2
|
5月前
|
前端开发 应用服务中间件 程序员
老程序员分享:Nginx相关面试题
老程序员分享:Nginx相关面试题
59 2
|
5月前
|
SQL JavaScript Java
java程序员面试题大全含答案(2018--2019)
java程序员面试题大全含答案(2018--2019)
|
4月前
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
|
4月前
|
存储 算法 索引
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
|
4月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
|
5月前
|
算法 索引
力扣随机一题 位运算/滑动窗口/数组
力扣随机一题 位运算/滑动窗口/数组
45 0
|
3月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
15天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
下一篇
无影云桌面