资讯专栏INFORMATION COLUMN

【问题】从一长串数字中找到重复多次的三个数字

afishhhhh / 3016人阅读

摘要:问题描述假设给定一个很长的数字,比如精确到万位,找到其中重复出现相邻三个数字。最后我们只要把新序列里统计值大于的打印出来即可。我们可以用更加优雅的方式来呈现以上算法,简洁但不简单。以上便是上原题的最佳答案。

问题描述
https://stackoverflow.com/que...

假设给定一个很长的数字,比如PI精确到100万位,找到其中重复出现相邻三个数字。比如给定的数字是1233223332321234323123,那么结果应该是:

123 repeat 3 times
233 repeat 2 times
323 repeat 2 times
332 repeat 2 times
解决思路

如果要统计相邻三个数字的重复次数,那么必然需要将其所有可能都列出来,通过Python的切片我们很容易实现:

number = "1233223332321234323123"
split = [number[position:position + 3] for position in range(len(number) - 2)]

print(split)
# ["123", "233", "332", "322", "223", "233", "333", "332", "323", "232", "321", "212", "123", "234", "343", "432", "323", "231", "312", "123"]

接下来我们需要统计切好的序列里各个数字出现的次数,因为需要处理是3位数字,可以考虑新建一个长度为1000的空序列,如果数字出现就在对应下标加一,达到统计的目的。

seq = [0] * 1000

for x in split:
    seq[int(x)] += 1

最后我们只要把新序列里统计值大于1的打印出来即可。

for i in range(1000):
    if seq[i] > 1:
        print("{} repeat {} times".format(i, seq[i]))

# 123 repeat 3 times
# 233 repeat 2 times
# 323 repeat 2 times
# 332 repeat 2 times

我们可以用更加优雅的方式来呈现以上算法,简洁但不简单。

seq = [0] * 1000

for val in [int(number[pos:pos+3]) for pos in range(len(number) - 2)]:
    seq[val] += 1

print ([(num, seq[num]) for num in range(1000) if seq[num] > 1])

以上便是Stack Overflow上原题的最佳答案。

拓展思考

如果这个问题给定的不是数字,而是字符串比如abccdbadfdaabc,依然是要找到相邻的3个重复字母,你有没有好办法?

关于作者:

Toby Qin, Python 技术爱好者,目前从事测试开发相关工作,转载请注明原文出处。

欢迎关注我的博客 https://betacat.online,你可以到我的公众号中去当吃瓜群众。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41178.html

相关文章

  • js谜之正则表达式

    摘要:用正则表达式语言创建的。匹配非数字的字符使用元字符元字符在正则表达式中有特殊含义的字符。正则表达式默认是区别大小写的。正则表达式的字符串表示。若是一个正则表达式,若有标志则替换所有匹配之处,若没有则只替换第一个匹配之处。 前言 好久之前就说要写一篇正则表达式的文章,正则表达式总是记了又忘,忘了再记,记了再忘,卒。言归正传,今天终于要研究一下这个谜一样的正则表达式了。其实正则表达式并不难...

    wendux 评论0 收藏0
  • 正则从零到简单分析html标签

    摘要:对于正则之前一直是一个百度程序员也许超过一半甚至更多的程序员也是那么这次来学习一下正则表达式事出有因这部分介绍一下需求的由来与主要内容无关工作上有了这样的需求端从来的数据格式是也就是文章内容并夹杂着诸多标签和嵌套然而正在开发的是项目的标签 对于正则之前一直是一个百度程序员, 也许超过一半甚至更多的程序员也是, 那么这次来学习一下正则表达式. 事出有因 这部分介绍一下需求的由来, 与主要...

    antz 评论0 收藏0
  • Python3之正则表达式详解

    摘要:匹配个或个由前面的正则表达式定义的片段,非贪婪方式精确匹配个前面表达式。所以接着上面的例子,我们可以改写一下正则表达式。因此,我们可以在使用来简化正则表达式的书写。 作者:毕来生微信:878799579 正则表达式本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索、替换、匹配验证都不在话下。 当然对于爬虫来说,有了...

    phpmatt 评论0 收藏0
  • Python3网络爬虫实战---26、正则表达式

    摘要:上一篇文章网络爬虫实战高级用法下一篇文章网络爬虫实战与正则表达式抓取猫眼电影排行本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索替换匹配验证都不在话下。 上一篇文章:Python3网络爬虫实战---25、requests:高级用法下一篇文章:Python3网络爬虫实战---27、Requests与正则表达式抓取猫眼...

    Pocher 评论0 收藏0
  • 理解开发HD钱包涉及BIP32、BIP44、BIP39

    摘要:本文首发于深入浅出区块链社区原文链接理解开发钱包涉及的原文已更新,请读者前往原文阅读如果你还在被钱包搞的一头雾水,来看看这边文章吧。所以我们要开发以太坊钱包同样需要对比特币的钱包提案有所了解。 本文首发于深入浅出区块链社区原文链接:理解开发HD钱包涉及的BIP32、BIP44、BIP39原文已更新,请读者前往原文阅读 如果你还在被HD钱包、BIP32、BIP44、BIP39搞的一头雾水...

    firim 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<