Google面试问题指南:使用Python删除重复出现的字符

  • 来源 | 愿码(ChainDesk.CN)内容编辑
  • 愿码Slogan | 链接每一个程序员的故事
  • 网站 | http://chaindesk.cn
  • 愿码愿景 | 打造全学科IT系统免费课程,助力小白用户、初级工程师0成本免费系统学习、低成本进阶,帮助BAT一线资深工程师成长并利用自身优点创造睡后收入。
  • 官方公众号 | 愿码 | 愿码服务号 | 区块链部落
  • 免费加入愿码全思惟工程师社群 | 任一公众号回复“愿码”两个字获取入群二维码

本文阅读时长:5min程序员

当下,谷歌的面试时常被程序员说起。有时,面试能让咱们发挥最好的一面,从而得到咱们想要的职位。
本文咱们将讨论一个可能出如今Google面试中的经典问题。面试

  • 愿码提示:若是您是编码老手,您可能已经知道如何解决这个问题!若是你经验较浅,那么你必定会从本文中受益。

问题

给定一个字符串做为输入,删除任何重复出现的字符,并返回新字符串。算法


正如咱们从上面的例子中看到的那样,输出是“abc”,由于咱们删除了第二个'a','b'和'c'。
首先,让咱们在Python 2.7中设置咱们的功能。数组

def deleteReoccurringCharacters(string):

为了解决这个问题,咱们将使用一个名为HashSet的特定数据结构。数据结构

一套

您能够将集合视为与数组相似,但有两个主要例外。学习

  1. 这是彻底无序的
  2. 它不能包含重复项

由于它是无序的,咱们还须要一个空字符串来存储咱们按顺序添加到集合中的字符。这将是咱们返回的字符串。
咱们来设置一下区块链

def deleteReoccurringCharacters(string):
    seenCharacters = set()
    outputString = ''

如今咱们已经创建了咱们须要的数据结构,让咱们再来谈谈咱们的算法。
因为集合在内存中的工做方式,它的查找时间复杂度为0(1)。
这意味着咱们能够用它来检查咱们是否已经访问过一个角色!网站

咱们的算法


遍历初始字符串中的全部字符并执行如下操做:
第1步:检查角色是否已经在咱们的设置中
第2歩:若是它不在集合中,则将其添加到集合中并将其附加到字符串
让咱们看看代码中的内容编码

for char in string:
    if char not in seenCharacters:
        seenCharacters.add(char)
        outputString += char

咱们没必要担忧“else”状况,由于咱们不须要处理重复出现的字符自己。如今剩下要作的就是返回outputString。
这是完成的代码的样子:spa

def deleteReoccurringCharacters(string):
    seenCharacters = set()
    outputString = ''
    for char in string:
        if char not in seenCharacters:
            seenCharacters.add(char)
            outputString += char
    return outputString

若是这是一次面试,招聘人员会问你时间和空间的复杂性。咱们来分析一下。

时间复杂性


迭代整个输入字符串的时间复杂度为O(n),由于字符串自己有n个字符。
可是,因为HashSet的查找时间为O(1),因此不会影响时间复杂度。最后的时间复杂度为O(n)。

空间复杂性


最糟糕的状况是,咱们获得一个包含全部惟一字符的字符串。例如,“abcdef”。在这种状况下,咱们将在字符串和集合中存储全部n个元素。然而,咱们也受到英语字母大小的限制。这是一个很好的机会来问咱们的面试官什么类型的字符在字符串中是惟一的(大写/小写/数字/符号)。假设初始字符串将包含字母表中的小写字母,由于字母表是有限的,因此集合和输出字符串不能大于26个字符。留给咱们最坏的状况空间复杂度为O(1)。

相关文章
相关标签/搜索