字符篇

作者: 小笨郎 | 来源:发表于2018-07-01 15:51 被阅读0次

1、第一个只出现一次的字符

问题描述:在字符串中找出第一个只出现一次的字符,如输入‘bacbd’,输出‘a’。要求时间复杂度为O(n),空间复杂度为O(1)。

解题思路:
方法一:遍历每个字符,当访问到某个字符时,在拿它与它后面的每个字符比较,如果比较完发现没有与它重复的字符,即找到,否则,没有找到。这种方法的时间复杂度为O(n*n),所以不满足要求。
方法二:如果遍历一遍字符串,能得每个字符出现的次数,然后从结果中找到次数为1的字符,不就解决问题了吗?关键在于使用什么结构存储,很容易想到python中dict,key为字符,value为出现的次数。但是这里我用list,key是list的索引,正好对应字符的ASCII值,value是该字符出现的次数。由于没有嵌套for循环,所以时间复杂度为O(n),我们假定所有字符都是ASCII表中,可以初始化一个大小为256的列表,所以空间复杂度就是O(1)。
代码如下:

def first_not_repeating_char(str):
    if not str:
        return None
    arr = [0]*256

    for ch in str:
        arr[ord(ch)] += 1

    for ch in str:
        if arr[ord(ch)] == 1:
            return ch

    return None

print(first_not_repeating_char('aabdbccc'))
#结果为: d

相关文章

  • 字符篇

    1、第一个只出现一次的字符 问题描述:在字符串中找出第一个只出现一次的字符,如输入‘bacbd’,输出‘a’。要求...

  • 字符集和字符编码

    一篇很好地字符集和字符编码的详细介绍 字符集和字符编码(Charset & Encoding)

  • String(字符)篇

    1.字符串的一些问题 2.字符串属性和方法 字符串属性 字符串方法 javascript == 与 ===区别

  • 2 字符篇

    前面我们已经了解了Ruby中数字的使用,那么字母呢?以及单词和文本怎么使用? 在程序中我们把由字母连在一起的这个串...

  • Linux_shell_小命令.md

    一. 路径篇 cd 变换路径 pwd 当前路径 readlink 查找软链接地址 二. 字符串篇 grep 字符串...

  • 正则表达式

    javascript篇 字符类 直接量字符 通过反斜线\进行转义直接匹配 用如下符号来代表某个可能字符的集合 | ...

  • Zsh 开发指南(第四篇 字符串处理之通配符)

    导读 这是字符串处理系列的第三篇文章。前两篇基本覆盖了字符串处理中的常用操作,但在字符串匹配方面,没有详细展开。 ...

  • 面向小白的Python教程:基础篇(三)字符串

    在入门篇中我们介绍过字符串,本节我们更深入地了解字符串。本节将介绍转义字符,原始字符串,以及字符串常用方法等内容。...

  • 车牌识别LPR(七)-- 字符特征

    第七篇:字符特征 选择的字符特征应该满足以下条件: (1)选取的字符特征具有较强的鲁棒性,不受字符变形、弯曲等影响...

  • sql 注入绕过waf

    6.特殊符号 特殊字符是什么?除了字符串和数字都是特殊字符 比如~!@#¥%…………&*()— 乌云的一篇waf绕...

网友评论

      本文标题:字符篇

      本文链接:https://www.haomeiwen.com/subject/aqacuftx.html