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*/
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 【Golang】LeetCode-剑指Offer-面试题50-第一个只出现一次的字符【两种解法】
- 面试题35:第一个只出现一次的字符
- 面试题41:从字符串中找到第一个只出现一次的字符
- 【剑指offer】面试题35-第一个只出现一次的字符
- 微软,Google面试题 (13) —— 第一个只出现一次的字符
- 算法与数据结构面试题(21)-在一个字符串中找到第一个只出现一次的字符
- 面试题:第一个只出现一次的字符
- 面试题 找到字符串中第一个只出现一次的字符
- 面试题35—第一个只出现一次的字符
- 剑指Offer_面试题35_第一个只出现一次的字符
- 【剑指offer】5.3时间效率与空间效率的平衡——面试题35:第一个只出现一次的字符
- 面试题35:第一个只出现一次的字符
- 面试题35:第一个只出现一次的字符
- 程序员面试题100题第13题——第一个只出现一次的字符
- 牛客剑指Offer面试题50:第一个只出现一次的字符(题目1:字符串中第一个只出现一次的字符)
- 【面试题】剑指Offer-35-第一个只出现一次的字符
- 面试题 35: 第一个只出现一次的字符
- 面试题39:第一个只出现一次的字符
- 剑指offer面试题[35]-第一个只出现一次的字符
- 剑指Offer面试题50:第一个只出现一次的字符