欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

牛客66道编程题——第一个只出现一次的字符

程序员文章站 2022-07-15 10:44:26
...

题目

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

方法一

class Solution:
    def FirstNotRepeatingChar(self, s):
        # write code here
        FALSE=-1#注意题目要求返回-1,因此这里FALSE的定义应该直接是数字-1,而不是字符串-1
        L=list(s)#把字符串转换为列表
        for i in L:
            if L.count(i)==1:#利用count函数进行判断
                return L.index(i)
                break#注意break摆放的位置
        return FALSE

方法二:哈希表法

class Solution:
    def FirstNotRepeatingChar(self, s):
        # write code here
        ls=[0]*256#建立一个长度为256,里面的值都为0的线性表
        for i in s:
            ls[ord(i)]+=1#统计字符串s中的表的值
        for j in s:#查找的过程
            if ls[ord(j)]==1:
                return s.index(j)
        return -1

ord函数
ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。

为什么要建立一个长度为256的列表??
因为这道题要处理的是字符串,ord函数处理字符串,返回的是8位的ASCII字符串。8位的ASCII字符串有256种可能,因此需要建立一个长度为256的列表。