[本文出自天外归云的博客园]
总结一下关于回文相关的算法:
- 判断字符串本身是否是回文
- 返回字符串中的所有子串
- 找到字符串中包含的所有回文
- 判断字符串中是否包含回文
- 将字符串变成一个不包含回文的字符串
代码如下:
# 判断字符串本身是否是回文 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))