老卫带你学---剑指offer刷题系列(34.第一个只出现一次的字符)

34.第一个只出现一次的字符

问题:

在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).

解决:

思想:

这道理也是计数问题,同样的设置一个count字典,用来保存访问次数。然后再去依次访问原来的字符,并且查看对应字典是否为1,然后返回其位置。
这里要注意一下代码中,count_dic.get(s[i]) == None中对于没有键值的字典,要用get函数查看是否为None,不能与0比较。另外问题中有说过第一次出现的数据,我们字典有个特性特别坑,对于新来的键会放在前面,就会让我们找到错误的答案。我们需要**for j in range(n)**从原来的字符中依次访问。

python代码:

# -*- coding:utf-8 -*-
class Solution:
    def FirstNotRepeatingChar(self, s):
        # write code here
        if (not s):
            return -1
        count_dic = {}
        n = len(s)
        for i in range(n):
            # print(i)
            if (count_dic.get(s[i]) == None):
                count_dic[s[i]] = 1
            else:
                count_dic[s[i]]+= 1
        for j in range(n):
            if(count_dic[s[j]] == 1):
                return j

        return -1
                
发布了160 篇原创文章 · 获赞 30 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/yixieling4397/article/details/104994195