zoukankan      html  css  js  c++  java
  • Python3回文相关算法小结

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

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

    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))
  • 相关阅读:
    mac下chrome快捷键,vscode快捷键
    css3 rgba()/opacity()
    sublime 将打字内容放在屏幕中央
    HDU 1427 速算24点【数值型DFS】
    HDU 1015 Safecracker【数值型DFS】
    HDU 2553 N皇后问题【棋盘型DFS】
    HDU 2660 Accepted Necklace【数值型DFS】
    2016中国大学生程序设计竞赛
    DFS之奇偶剪枝
    G
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/9054245.html
Copyright © 2011-2022 走看看