python – 如何检查序列是否可以变成回文

python – 如何检查序列是否可以变成回文,第1张

概述我必须找到一个列表是否可以作为回文.我的程序的第一部分对列表进行排序. A = [0, 99, 97, 97, 99, 100, 100, 0]# sorted:B = [0, 0, 97, 97, 99, 99, 100, 100] 此列表可以是回文,因为它可以重新排序为: [0, 97, 99, 100, 100, 99, 97, 0] 如果列表可以是回文,我编写了以下代码以返回True. 我必须找到一个列表是否可以作为回文.我的程序的第一部分对列表进行排序.

A = [0,99,97,100,0]# sorted:B = [0,100]

此列表可以是回文,因为它可以重新排序为:

[0,0]

如果列表可以是回文,我编写了以下代码以返回True.

i=0counter = 0while i<len(B):    if i+1 < len(B):        if B[i]==B[i+1]:            print(B[i],B[i+1])            i+=2        else:            i+=1            counter += 1    else:        i+=1if counter<2:    return Truereturn False

但是,如果我测试列表[0,1],它会进入看起来像无限循环的东西.如何正确检查列表是否可以成为回文?

解决方法 当我们遍历B时,我们可以使用一个集来跟踪到目前为止哪些元素具有奇数(使用此处的集合比列表快得多):

odds = set()for i in B:    if i in odds:        odds.remove(i)    else:        odds.add(i)

然后,如果赔率的长度为0或1,则打印True.否则打印False.

print len(odds) <= 1 # prints the value you're looking for

正如@Antti所指出的,如果您正在优化性能(大约20%的速度提升),可以通过在循环外部进行属性查找来加快速度:

odds = set()remove = odds.removeadd = odds.addfor i in B:    if i in odds:        remove(i)    else:        add(i)print len(odds) <= 1
总结

以上是内存溢出为你收集整理的python – 如何检查序列是否可以变成回文全部内容,希望文章能够帮你解决python – 如何检查序列是否可以变成回文所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1195902.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存