33. 判断字符是否唯⼀(easy)
- 题⽬描述:
- 解法(位图的思想):
- C++ 算法代码:
- Java 算法代码:
题⽬链接:⾯试题 01.01. 判定字符是否唯⼀
题⽬描述:
实现⼀个算法,确定⼀个字符串 s 的所有字符是否全都不同。
⽰例 1:
输⼊: s = “leetcode”
输出: false
⽰例 2:
输⼊: s = “abc”
输出: true
限制:
0 <= len(s) <= 100
s[i]仅包含⼩写字⺟
如果你不使⽤额外的数据结构,会很加分。
解法(位图的思想):
算法思路:
利⽤「位图」的思想,每⼀个「⽐特位」代表⼀个「字符,⼀个 int 类型的变量的 32 位⾜够表⽰所有的⼩写字⺟。⽐特位⾥⾯如果是 0 ,表⽰这个字符没有出现过。⽐特位⾥⾯的值是 1 ,表⽰该字符出现过。
那么我们就可以⽤⼀个「整数」来充当「哈希表」。
C++ 算法代码:
class Solution{
public:bool isUnique(string astr){// 利⽤鸽巢原理来做的优化if(astr.size() > 26) return false; int bitMap = 0;for(auto ch : astr){int i = ch - 'a';// 先判断字符是否已经出现过if(((bitMap >> i) & 1) == 1) return false;// 把当前字符加⼊到位图中bitMap |= 1 << i;}return true;}
}
Java 算法代码:
class Solution {public boolean isUnique(String astr) {// 利⽤鸽巢原理来做优化if(astr.length() > 26) return false;int bitMap = 0;for(int i = 0; i < astr.length(); i++){int x = astr.charAt(i) - 'a';// 先判断字符是否在位图中if(((bitMap >> x) & 1) == 1) return false;// 把当前字符加⼊到位图中bitMap |= 1 << x;}return true;}
}