实现一个算法,确定一个字符串s的所有字符是否全部都不同?
示例1:
输入: s = "leetxcode"
输出: false
示例2:
输入: s = "abc"
输出: true
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
关于本题的解答,我一共想到三种方式去解决:
1. 最容易想到的是利用 集合, 即将字符串集合处理后再与原来字符串长度进行比较;
class Solution:
def isUnique(self, astr: str) -> bool:
if len(set(astr)) == len(astr):
return True
else:
return False
2. 可以创建字符的哈希表,如果当前字符不存在于哈希表,则将当前字符加在哈希表上,如果当前字符存在于哈希表上,直接退出;
class Solution {
public:
bool isUnique(string astr) {
if(astr.length() == 0)
return true;
//创建哈希表
unordered_map<char, int>map;
for(int i = 0; i< astr.length(); i++){
if(map.find(astr[i])!= map.end())
return false;
map[astr[i]] = i;
}
return true;
}
};
3. 这是最好的方式,利用位运算的思想实现。本质上就是先移位,计算与字符‘a’的距离,即要移动多少位,然后设定一个位数序列mask,将mask与对应移动1<<()进行与操作,如果不为0,说明以前字符在mask中有记录,换句话说出现过。如果为0,说明当前字符在mask中并没有出现过,利用或操作将当前字符记录在mask中;
class Solution:
def isUnique(self, astr: str) -> bool:
mask = 0
for cha in astr:
move_bit = ord(cha) - ord('a')
if mask & 1<<move_bit != 0:
return False
mask = mask | 1<< move_bit
return True