您的位置:首页 > 职场人生

leetcode--面试题50. 第一个只出现一次的字符

2020-03-05 11:41 866 查看

面试题50. 第一个只出现一次的字符
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。

示例:

s = “abaccdeff”
返回 “b”

s = “”
返回 " "

限制:

0 <= s 的长度 <= 50000

思路一:哈希表法

class Solution {
public:
char firstUniqChar(string s) {
char ans = ' ';
int len = s.length();
unordered_map<char, int> map;
for (int i=0; i<len; i++){
map[s[i]]++;
}
for (int i=0; i<len; i++){
if (map[s[i]] == 1){
ans = s[i];
break;
}
}
return ans;
}
};
/*64ms,13.4MB*/

思路二:字母数组法

class Solution {
public:
char firstUniqChar(string s) {
char ans = ' ';
int len = s.length();
vector<int> c(26);
for (int i=0; i<len; i++){
c[s[i]-'a']++;
}
for (int i=0; i<len; i++){
if (c[s[i]-'a'] == 1){
ans = s[i];
break;
}
}
return ans;
}
};
/*24ms,13.1MB*/

思路三:bitset法

class Solution {
public:
char firstUniqChar(string s) {
char ans = ' ';
int len = s.length();
bitset<128> bs1, bs2;
for (int i=0; i<len; i++){
if (!bs1[s[i]] && !bs2[s[i]]){
bs1[s[i]] = 1;
}else if (bs1[s[i]] && !bs2[s[i]]){
bs2[s[i]] = 1;
}
}
for (int i=0; i<len; i++){
if (bs1[s[i]] && !bs2[s[i]]){
ans = s[i];
break;
}
}
return ans;
}
};
/*40ms,13MB*/

参考链接:
https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/solution/bisetshi-yong-by-yl-precious/

  • 点赞
  • 收藏
  • 分享
  • 文章举报
凌楠lyy 发布了36 篇原创文章 · 获赞 0 · 访问量 356 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: