【剑指offer】第一个只出现一次的字符位置(python)

在完成【剑指offer】试题 第一个只出现一次的字符位置 时,写了如下代码:

class Solution:
    def FirstNotRepeatingChar(self, s):
        # write code here
        m = {}
        for i in range(0, len(s)):
            if len(m.keys()) == 0:
                m[s[i]] = i
            else:
                if s[i] in m.keys():
                    m[s[i]] = -1
                else:
                    m[s[i]] = i

        for key in m.keys():
            if m[key] != -1:
                return m[key]
        return -1

在牛客网的编程环境中运行一直报错,多次检查没有错误后,我把上述代码放到PyCharm中运行(即下列代码),发觉没有报错:

# -*- coding:utf-8 -*-

def FirstNotRepeatingChar(s):
    # write code here
    m = {}
    for i in range(len(s)):
        if len(m) == 0:
            m[s[i]] = i
        else:
            if s[i] in m.keys():
                m[s[i]] = -1
            else:
                m[s[i]] = i

    for key in m.keys():
        if m[key] != -1:
            print(key)
            return m[key]
    return -1

print(FirstNotRepeatingChar('NXWtnzyoHoBhUJaPauJaAitLWNMlkKwDYbbigdMMaYfkVPhGZcrEwp'))

查询资料后知道:python 2.7中字典z是无序的,python3.6之后字典次才变成有序。

改进的python 2.7代码如下所示:

# -*- coding:utf-8 -*-
'''
学到的知识点,python2.7版本的字典是无序的,python3.x是有序的
'''
class Solution:
    def FirstNotRepeatingChar(self, s):
        # write code here
        keys = []
        m = {}
        for i in range(0, len(s)):
            if len(m.keys()) == 0:
                keys.append(s[i])
                m[s[i]] = i
            else:
                if s[i] in m.keys():
                    m[s[i]] = -1
                else:
                    keys.append(s[i])
                    m[s[i]] = i

        for key in keys:
            if m[key] != -1:
                return m[key]
        return -1

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 12:02
ssob上原来真有BOSS啊
硫蛋蛋:这种也是打工的,只不是是给写字楼房东打工
点赞 评论 收藏
分享
点赞 评论 收藏
分享
frutiger:逆天,我家就安阳的,这hr咋能说3k的,你送外卖不比这工资高得多?还说大厂来的6k,打发叫花子的呢?这hr是怎么做到说昧良心的话的
找工作时遇到的神仙HR
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务