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

题目描述:

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

解法:哈希表+双向指针

解题思路:

方法一:使用map记录一遍每个字符出现的次数,第二遍输出遇到的第一个次数为1的字符下标。

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


方法二:巧用string容器的查找函数:使用 find()和 rfind()进行遍历。

s.find(s[i]):返回字符串s中从左向右查找s[i]第一次出现的位置。
s.rfind(s[i]):返回字符串s中从右向左查找s[i]第一次出现的位置。

class Solution {
public:
    int firstUniqChar(string s) 
    {
        for (int i = 0; i < s.size(); i++)
        {
            if (s.find(s[i]) == s.rfind(s[i]))
                return i; 
        }
        return -1;
    }
};

你可能感兴趣的:(刷题,数据结构,哈希算法,算法)