数据结构每日一题11

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

先遍历一遍,把所有元素及其出现次数记录在一个哈希表中,在遍历一遍将只出现一次元素的下标返回。

class Solution {

public:

    int firstUniqChar(string s) {

        unordered_map<char,int> temp;

        for(char c : s)

        {

            temp[c]++;

        }

        for(int i =0 ;i<s.size();i++)

        {

            if(temp[s[i]]==1){

                return i;

            }

        }

        return -1;

    }

};

方法二:

第一次遍历字符串,将元素添加进哈希表中,出现过一次以上的value记为-1,仅出现过一次的value记为它的下标位置,第二次遍历哈希表找到最小的value值返回。

class Solution {

public:

    int firstUniqChar(string s) {

        int n = s.size();

        unordered_map<char,int> map1;

        for(int i =0;i<n;i++){

            if(map1.count(s[i])){

                map1[s[i]] = -1;

            }else {

                map1[s[i]] = i;

            }

        }

        int position = n;

        for(auto [_,pos] : map1){

            if(pos != -1 && pos <position){

                position = pos;

            }

        }

        if(position == n){

            return -1;

        }

        return position;

    }

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值