力扣 - 字符串中的第一个唯一字符 c#

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

示例

s = "leetcode"

返回 0

s = "loveleetcode"

返回 2


解题思路: 

1 第一种最开始的思路是逐个字符去做循环遍历,但是这个方案并不是最优的,遍历的次数,是n*n+1次。所以如果遇到字符串很长的话,会有问题 “超出时间限制”

public int FirstUniqChar(string s){
    for (int n = 0; n < s.Length; n++)
    {
        bool isSame = false;
        for (int i = s.Length-1; i >=0; i--)
        {
            if (i!=n && s[n] == s[i])
            {
                    isSame = true;
            }
        }

        if (!isSame)
            return n;
    }
    return -1;
}

 

2 还有一种方案就是遍历两次,第一次遍历,把字符和字符的数量,存入哈希字典。第二次遍历去查询数量,如果是1的话就是符合条件的字符,直接返回,没有的话返回-1;

 public int FirstUniqChar(string s)
 {
        Dictionary<char,int> _dic = new Dictionary<char, int>();
        for (int n = 0; n < s.Length; n++)
        {
            if (!_dic.ContainsKey(s[n]))
            {
                _dic.Add(s[n],1);
            }
            else
            {
                _dic[s[n]]++;
            }
        }

        for (int i = 0; i < s.Length; i++)
        {
            if (_dic[s[i]] == 1)
                return i;
        }
        
        return -1;
    }

 

 

 

你们如果有好的思路欢迎讨论~~
一起刷题呀~~ 欢迎一起交流
QQ群 :665343902

以上都是都是引用的leetcode网站内容,若有侵权联系我~

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值