LeetCode 0387. 字符串中的第一个唯一字符

77 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

【LetMeFly】387.字符串中的第一个唯一字符

力扣题目链接:leetcode.cn/problems/fi…

给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。

 

示例 1:

输入: s = "leetcode"
输出: 0

示例 2:

输入: s = "loveleetcode"
输出: 2

示例 3:

输入: s = "aabb"
输出: -1

 

提示:

  • 1 <= s.length <= 105
  • s 只包含小写字母

方法一:计数

首先遍历一遍字符串,然后把每个字母的出现次数计算出来。

之后再遍历一遍字符串。遍历过程中,如果遇到了一个值出现过一次的字母,就返回这个字母的下标。

否则(第二次遍历完也没有发现只出现了一次的字母)就返回-1

  • 时间复杂度O(n)O(n),其中nn是字符串长度
  • 空间复杂度O(C)O(C),其中CC是字符集大小。本题中字符集为26个小写英文字母,C=26C=26

AC代码

C++

class Solution {
public:
    int firstUniqChar(string& s) {
        int cnt[26] = {0};
        for (char& c : s)
            cnt[c - 'a']++;
        for (int i = 0; i < s.size(); i++) {
            if (cnt[s[i] - 'a'] == 1)
                return i;
        }
        return -1;
    }
};

同步发文于CSDN,原创不易,转载请附上原文链接哦~ Tisfy:letmefly.blog.csdn.net/article/det…