一、题目
二、题解
鸽巢原理+位图思想,一共有26个英文字母,用一个int类型的数据存储信息完全可以,这个int的第i位元素为1就代表则第i个字母已经存在,如果不存在就让这一位变为1,如果字符串长度大于26那么必然有重复的,这就是鸽巢原理
class Solution {
public:
bool isUnique(string astr) {
int n = astr.size(), hash = 0;
if (n > 26) return false; // 鸽巢原理
for (int i = 0; i < n; i++) {
int idx = astr[i] - 'a';
if ((1 << idx) & hash) return false;
hash |= (1 << idx);
}
return true;
}
};