日新刷题 - 387. 字符串中的第一个唯一字符

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情

一、题目描述:

387. 字符串中的第一个唯一字符

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

示例 1:

输入: s = "leetcode"
输出: 0
复制代码

示例 2:

输入: s = "loveleetcode"
输出: 2
复制代码

示例 3:

输入: s = "aabb"
输出: -1
复制代码

提示:

  • 1 <= s.length <= 10^5
  • s 只包含小写字母

二、思路分析:

先将字符串的每一个字符存进hash表中,字符为key,下标为value,遇到重复的字符时,hash表会自动更新value。然后遍历字符串,使用string类的find函数,返回每一个字符第一次出现的下标,如果此值等于hash表中对应字符的value,那么说明这个字符是第一次出现且下标最小,返回这个value,如果遍历完之后都找不到,那么便返回-1.(本来是想使用迭代器直接对hash表进行迭代,能省一点时间,但是由于使用的是无序的map,所以输出的第一个value是第二个无重复字符的value,不知道有没有大佬能看下该怎样节省时间呢)

三、AC 代码:


class Solution {
public:
    int firstUniqChar(string s) {
        unordered_map<char, int> map1;
        for (int i = 0; i < s.size(); i++) {
            map1[s[i]] = i;
        }//最后一次出现的下标
        for (int i = 0; i < s.size(); i++)
        {
            if (s.find(s[i]) == map1[s[i]]) {
                return i;
            }
        }
        return -1;
    }
};
复制代码

范文参考:

位 + 正则 + 哈希 + 集合 + 队列 + 原生(17解法,超100%) - 字符串中的第一个唯一字符 - 力扣(LeetCode)

python3 字典 统计每个字母的次数,然后返回第一个次数为1的字母的索引 - 字符串中的第一个唯一字符 - 力扣(LeetCode)

利用数组记录词频,找到最早出现的非重复字符位置 - 字符串中的第一个唯一字符 - 力扣(LeetCode)

猜你喜欢

转载自juejin.im/post/7131289299970064391
今日推荐