本题用常规思路是很好解决的,可惜看了其它人另类的解决方法,唉,还是得学习一下人家的思路。题解尽量的详细,方便后来者观看。
题目地址:
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
示例 1:
输入: s = "leetcode"
输出: false
示例 2:
输入: s = "abc"
输出: true
这是我一开始的思路。
class Solution {
public:
bool isUnique(string astr) { //定义bool变量
sort(astr.begin(), astr.end());//sort函数从小到大排序
int n = astr.size();//n = astr数组长度
for(int i = 0; i < n -1; i++){
if(astr[i] == astr[i + 1])//比较相邻的字符
return false;//如果相同返回false
}
return true;//如果不同返回true
};
这是看到的人家的思路。
class Solution {
public:
bool isUnique(string astr) {
int hashBit = 0;//记录字符的二进制值
for(auto c : astr){//遍历astr数组
int bit = 1 << (c - 'a');
if((hashBit & bit) == bit)//按位为1表示出现,按位为0表示没出现
return false;
hashBit |= bit;//位或后,将字符的二进制位添加到哈希表中
}
return true;
}
};