[本文出自天外归云的博客园]

总结一下关于回文相关的算法:

  1. 判断字符串本身是否是回文
  2. 返回字符串中的所有子串
  3. 找到字符串中包含的所有回文
  4. 判断字符串中是否包含回文
  5. 将字符串变成一个不包含回文的字符串

代码如下:

# 判断字符串本身是否是回文
def is_huiwen(str, i=0):
# 回文至少长度为2
if len(str) == 1:
return False
# 撞针法判断是否是回文字符串
while True:
if i >= len(str) - i:
return True
if str[i] != str[len(str) - i - 1]:
return False
i += 1 # 返回字符串中所有的子串
all_substr = lambda str: [str[i:i + x + 1] for x in range(len(str)) for i in range(len(str) - x)] # 找到字符串中包含的所有回文
def find_all_huiwen(str, ret=[]):
substrs = all_substr(str)
# 遍历字符串中的所有子串并找出所有回文子串
for i in range(len(substrs)):
if is_huiwen(substrs[i]):
ret.append(substrs[i]) # 判断字符串中是否包含回文
def contain_huiwen(str):
substrs = all_substr(str)
# 遍历字符串中所有子串并判断字符串中是否包含回文子串
for i in range(len(substrs)):
if is_huiwen(substrs[i]):
return True
return False # 将字符串变成一个没有回文的字符串
def no_huiwen(str, ret="", i=0):
# 从字符串的索引第0位开始到字符串索引末位结束
while i < len(str) - 1:
# 确保新生成的字符串不包含回文
if not contain_huiwen(ret + str[i]):
ret += str[i]
# 逐位判断
i += 1
return ret if __name__ == '__main__':
str = "abccbabc"
find_all_huiwen(str)
print(contain_huiwen(str))
print(no_huiwen(str))

Python3回文相关算法小结的更多相关文章

  1. Java判断回文数算法简单实现

    好久没写java的代码了, 今天闲来无事写段java的代码,算是为新的一年磨磨刀,开个头,算法是Java判断回文数算法简单实现,基本思想是利用字符串对应位置比较,如果所有可能位置都满足要求,则输入的是 ...

  2. LeetCode: Palindrome 回文相关题目

    LeetCode: Palindrome 回文相关题目汇总 LeetCode: Palindrome Partitioning 解题报告 LeetCode: Palindrome Partitioni ...

  3. hihoCoder #1032 : 最长回文子串 [ Manacher算法--O(n)回文子串算法 ]

    传送门 #1032 : 最长回文子串 时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相 ...

  4. Manacher算法--O(n)回文子串算法

    转自:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824 O(n)回文子串算法 注:转载的这篇文章,我发现下面那个源代码有点bug... ...

  5. Manacher's algorithm: 最长回文子串算法

    Manacher 算法是时间.空间复杂度都为 O(n) 的解决 Longest palindromic substring(最长回文子串)的算法.回文串是中心对称的串,比如 'abcba'.'abcc ...

  6. hdu----(4513)吉哥系列故事——完美队形II(manacher(最长回文串算法))

    吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  7. 学习manacher(最长公共回文串算法)

    给定一个字符串求出其中最长个公共回文串. 举列子: abab   -->回文串长度为2 以前的算法诸如: 扩展kmp求法过于麻烦,看到有一篇博文(http://leetcode.com/2011 ...

  8. hdu 3068 最长回文 manacher算法(视频)

    感悟: 首先我要Orz一下qsc,我在网上很难找到关于acm的教学视频,但偶然发现了这个,感觉做的很好,链接:戳戳戳 感觉这种花费自己时间去教别人的人真的很伟大. manacher算法把所有的回文都变 ...

  9. [转]O(n)回文子串算法 Manacher算法

    这里,我介绍一下O(n)回文串处理的一种方法.Manacher算法.原文地址:http://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear- ...

随机推荐

  1. POJ 1815 Friendship (Dinic 最小割)

    Friendship Time Limit: 2000MS   Memory Limit: 20000K Total Submissions: 8025   Accepted: 2224 Descri ...

  2. Android tesseract-orc之扫描身份证号码

    踩了不少坑,终于把这个扫描版的身份证识别做出来了,图片识别引擎用的是tesseract,在已经训练好样本的情况下,感觉识别率还是一般般~ 下面说一说大概几个坑. 一. 编译tesseract-orc ...

  3. 压缩跟踪(CT)代码具体学习_模块1(样本的採集和扩充)

    本章主要具体解释的是compressive tracking框架中的第一部分:样本的採集和扩充部分. 在開始代码学习的前面,你须要知道的理论知识參见论文:Real-time Compressive T ...

  4. 《从零開始学Swift》学习笔记(Day 65)——Cocoa Touch设计模式及应用之选择器

    原创文章,欢迎转载.转载请注明:关东升的博客 实现目标与动作关联使用UIControl类addTarget(_:action:forControlEvents:)方法,演示样例代码例如以下: butt ...

  5. Android KLog源代码分析

    Android KLog源代码分析 Android KLog源代码分析 代码结构 详细分析 BaseLog FileLog JsonLog XmlLog 核心文件KLogjava分析 遇到的问题 一直 ...

  6. mongodb c++ driver 2.0编译使用

    安装boost1.48.0 在boost的官网下载boost1.48.0,链接例如以下: http://sourceforge.net/projects/boost/files/boost/1.48. ...

  7. dpkg卸载deb包

    一.背景: 一个脚本安装mysql,结果提示缺少依赖库,安装失败. 二.查询: 此时查询deb文件已经安装的情况,得到这个结果: root@debian:~# dpkg -l |grep mysql- ...

  8. windbg分析执行在64位环境下的32位程序的dump

    windbg命令例如以下 1.   .load wow64exts 2.   !sw 3.   ~* kvnf

  9. Mybatis mark 勿看

    Mybatis底层原理总结(一) 2018年01月11日 11:51:06 阅读数:2668 本文适合对Mybatis有一定了解的. 1. Mybatis 读取XML配置文件后会将内容放在一个Conf ...

  10. RxJava学习笔记(组合Observables)(转)

    组合Observable 当我们需要处理多个Observable的时候,我们可以通过Rxjava的组合函数来创建我们自己想要的Observable. Merge RxJava的 merge() 方法将 ...