题目链接
判定字符是否唯一
题目描述
注意点
- 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;}
}
关键点
- 位运算的思想