如何用python寻找一个字符串里的最大回文

这篇文章主要讲解了“如何用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

(0)
上一篇 2022年1月2日
下一篇 2022年1月2日

相关推荐

发表回复

登录后才能评论