这篇文章主要讲解了“如何用python寻找一个字符串里的最大回文”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用python寻找一个字符串里的最大回文”吧!
题目要求如下:
寻找一个字符串里的最大回文,例如字符串"sddcbabcdtre",这里面的最大回文是"dcbabcd"
所谓回文,是指一段字符串从左向右和从右向左看是一样的
题目讲明,是字符串里包含了一段回文,而不是整段字符串是一段回文
回文的长度可以是偶数,也可以是奇数
长度为1的字符串不算回文
对字符串进行遍历
每遍历到一个字符时,以其为中心向左右两侧验证是否构成回文
需要变量记录回文的起始位置和长度
#coding=utf-8str_value = "sddcbabcdtre"#str_value = "aaa"i = 0start_index = 0 #记录回文的起始位置plalindrome_len = 0while 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 += 1if plalindrome_len == 0: print 'no plalindrome'else: print str_value[start_index: start_index+plalindrome_len]
程序的关键在于以某一个字符为中心,向左右两侧遍历,以判断是否构成回文,这很像将一张纸对折
对于while 循环,由于是在遍历字符串,那么对于两端的边界就必须做越界的检查,这是不可缺少的
程序里可能存在多个回文,因此想找出最大的,必须借助tmp_len来和已经找到的最大回文做比较
感谢各位的阅读,以上就是“如何用python寻找一个字符串里的最大回文”的内容了,经过本文的学习后,相信大家对如何用python寻找一个字符串里的最大回文这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4632317/blog/4538592