面试题 01.01. 判定字符是否唯一
程序员文章站
2022-04-03 08:52:04
...
面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode)
使用哈希表就会很简单,时空复杂度都是o(n)
class Solution {
public:
bool isUnique(string astr) {
bool flag[128] = {false};
for(const auto &c : astr){
if(!flag[c]) flag[c] = true;
else return false;
}
return true;
}
};
可以使用bitset:
class Solution {
public:
bool isUnique(string astr) {
bitset<26> flag = {0};
for(const auto &c : astr){
if(flag[c-'a'] == 0) flag[c-'a'] = 1;
else return false;
}
return true;
}
};
可以使用一个整数搭配位运算实现bitset:
class Solution {
public:
bool isUnique(string astr) {
if(astr.size() > 26) return false;
int mask = 0;
for(const auto &c : astr){
int cnt = c - 'a';
if((mask & (1 << cnt)) != 0) return false;
else mask |= (1 << cnt);
}
return true;
}
};
如果不使用额外的数据结构,应该怎么操作呢?可以使用排序啊,这样复杂度就是o(nlogn),但是不使用额外空间。
经过测试,全是小写字母
class Solution {
public:
bool isUnique(string astr) {
if(astr.size() > 26) return false;
sort(astr.begin(), astr.end());
for(int i = 1; i < astr.size(); ++i){
if(astr[i] == astr[i-1]) return false;
}
return true;
}
};
或者:
class Solution {
public:
bool isUnique(string astr) {
sort(astr.begin(), astr.end());
auto it = unique(astr.begin(), astr.end());
return it == astr.end();
}
};
不过既然
上一篇: 学习搭建SpringBoot框架
下一篇: Tex2DArray的使用举例