题目链接
判定字符是否唯一
题目描述
注意点
- 0 <= len(s) <= 100
- s[i]仅包含小写字母
解答思路
- 首先想到的是使用数组存储字母是否出现过,如果多次出现则直接返回false
- 为了不适用额外的数据结构,可以使用位运算判定字符是否唯一,思路为:根据ASCII码计算字母与’a’的差值idx,将1左移idx位与num做与运算,如果结果为1,说明num在这之前已经与1左移idx位进行了或运算,之前出现过该字母,直接返回false,否则将1左移idx位与num做或运算
代码
方法一:
class Solution {
public boolean isUnique(String astr) {
if (astr.length() > 26) {
return false;
}
int[] arr = new int[26];
for (char c : astr.toCharArray()) {
if (arr[c - 'a'] != 0) {
return false;
}
arr[c - 'a'] = 1;
}
return true;
}
}
方法二:
class Solution {
public boolean isUnique(String astr) {
if (astr.length() > 26) {
return false;
}
int num = 0;
for (char c : astr.toCharArray()) {
int idx = c - 'a';
// 左移idx位为1,说明该字母已经出现过
if ((num & (1 << idx)) != 0) {
return false;
}
num = (num | (1 << idx));
}
return true;
}
}
关键点
- 位运算的思想