Skip to the content.

Ex50 第一个只出现一次的字符

题目描述

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s只包含小写字母。

解题思路

创建一个使用vector的26位的哈希表。这个vector的值有如下特征,index代表了char的哈希值:

最后遍历一遍这个vector,找到最小的index,相应的字符串的值就是所求的值。

代码

class Solution {
 public:
  char firstUniqChar(std::string s) {
    if (s.size() == 0) return ' ';
    std::vector<int> vec(26, -1);
    for (auto i = 0; i < s.size(); ++i) {
      auto char_index = s[i] - 'a';
      if (vec[char_index] == -1) {
        vec[char_index] = i;
      } else if (vec[char_index] >= 0) {
        vec[char_index] = -2;
      }
    }
    auto index = s.size();
    for (auto i = 0; i < 26; ++i) {
      if (vec[i] >= 0) {
        index = index < vec[i] ? index : vec[i];
      }
    }
    return index == s.size() ? ' ' : s[index];
  }
};

结果

执行结果:通过

执行用时:24 ms, 在所有 C++ 提交中击败了94.04%的用户

内存消耗:10.8 MB, 在所有 C++ 提交中击败了29.49%的用户