实现一个算法,确定一个字符串 s
的所有字符是否全都不同。
示例 1:
输入: s
= "leetcode"
输出: false
示例 2:
输入: s
= "abc"
输出: true
限制:
0 <= len(s) <= 100
s[i]
仅包含小写字母- 如果你不使用额外的数据结构,会很加分。
这道题我第一时间想到的就是用一个数组存个数,一个数组存26个字符,但是那样操作时间复杂度应该会很高,因此可以用哈希表,key-value的形式来存储,key存字符,value存个数
class Solution {
public:
bool isUnique(string astr) {
//定义一个vector容器,用来存储数组的字符个数,256覆盖了所有可能的字符
//实际上123就可以,因为小写字母对应最大的为122
vector<int> hash(256);
//循环遍历将每个字符存入哈希表,并进行计数+1
for(auto x:astr){
++hash[x];
//若计数超过1,即存在两个相同的字符,则返回false
if(hash[x]>1){
return false;
}
}
return true;
}
};
因为题目说最好不要用数据结构,所以换一种简单的思路,就是将字符串进行排序,然后只要比较相邻字符是否相同就好了
class Solution {
public:
bool isUnique(string astr) {
//定义数组的字符长度为l
int len=astr.size();
//若数字长度超过26,则必定有重复字符
if(len>26){
return false;
}
//对字符串进行排序
sort(astr.begin(),astr.end());
//遍历字符串,比较相邻字符是否相同
for(int i=0;i<len;i++){
if(astr[i]==astr[i+1]){
return false;
}
}
return true;
}
};