这篇文章主要讲解了“如何用python寻找一个字符串里的最大回文”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用python寻找一个字符串里的最大回文”吧!
题目要求如下:
寻找一个字符串里的最大回文,例如字符串"sddcbabcdtre",这里面的最大回文是"dcbabcd"
-
所谓回文,是指一段字符串从左向右和从右向左看是一样的
-
题目讲明,是字符串里包含了一段回文,而不是整段字符串是一段回文
-
回文的长度可以是偶数,也可以是奇数
-
长度为1的字符串不算回文
-
对字符串进行遍历
-
每遍历到一个字符时,以其为中心向左右两侧验证是否构成回文
-
需要变量记录回文的起始位置和长度
#coding=utf-8
str_value = "sddcbabcdtre"
#str_value = "aaa"
i = 0
start_index = 0 #记录回文的起始位置
plalindrome_len = 0
while i < len(str_value)-1:
tmp_len = 0
left,right = 0,0
#假设回文长度是偶数
if str_value[i] == str_value[i+1]:
# 找到下一个要比较的位置
left,right = i-1,i+2
tmp_len = 2
#注意循环的条件
while left >= 0 and right < len(str_value):
if str_value[left] == str_value[right]:
left -= 1 #向前
right += 1 #向后
tmp_len += 2 #长度要加2
else:
break
if tmp_len > plalindrome_len:
plalindrome_len = tmp_len
start_index = left + 1 #此处要加1
#假设回文长度是奇数
if i > 0 and str_value[i-1] == str_value[i+1]:
left,right = i-2,i+2
tmp_len = 3
while left >= 0 and right < len(str_value):
if str_value[left] == str_value[right]:
left -= 1
right += 1
tmp_len += 2
else:
break
if tmp_len > plalindrome_len:
plalindrome_len = tmp_len
start_index = left + 1
i += 1
if plalindrome_len == 0:
print 'no plalindrome'
else:
print str_value[start_index:
start_index+plalindrome_len]
-
程序的关键在于以某一个字符为中心,向左右两侧遍历,以判断是否构成回文,这很像将一张纸对折
-
对于while 循环,由于是在遍历字符串,那么对于两端的边界就必须做越界的检查,这是不可缺少的
-
程序里可能存在多个回文,因此想找出最大的,必须借助tmp_len来和已经找到的最大回文做比较
感谢各位的阅读,以上就是“如何用python寻找一个字符串里的最大回文”的内容了,经过本文的学习后,相信大家对如何用python寻找一个字符串里的最大回文这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/220145.html