python:回文字符串

131 阅读1分钟

核心思想

暴力遍历法
2个循环(2个指针)
外层循环,嵌套内层循环
[::-1]用来判断是否是回文

# sorted()函数进行对字段进行排序
# sorted()函数可以对列表排序,也可以对字典排序,区别就是key参数。
sorted( dict.items(),key=lambda x:x[1],reverse=True )
def main(s):
    # 如果传入的参数s只有一个字符,或者是空字符串,则不用查找回文子字符串,直接返回s
    n = len(s)
    
    if s <= 1:
        return s
    
    # 初始化一个dict,
    # 以key-value的方式,存放每个回文子字符串和它的长度
    final_dict = dict()
    
    # 2层循环,外层循环中嵌套着内层循环
    # 外层循环i,内层循环j
    for i in range(0,n):
        # 内层循环j
        # 如果这里是range(i,n),则把长度为1的回文也计算在内
        # 如果这里是range(i+1,n),及j始终是比i至少大1,则不包括长度为1的回文
        for j in range(i+1,n):
            print(i,j)
            sub_string = s[i:j+1] # 截取字符串,注意是j+1
            
            # 判断是否是回文
            if sub_string == sub_string[::-1]:
                final_dict[s[i:j+1]] = len(s[i:j+1])
            else:
                continue

    return final_dict
    
s = '0123210'

final_dict = main(s)

# 排序,方便找到长度最长的回文字符串
# sorted()默认是升序排序,reverse=False
# 当reverse=True,及是否反转=是,则为降序排序
final_dict = sorted(final_dict.items(),key=lambda x:x[1],reverse=True) 

print(final_dict)

# 结果
[('0123210', 7), ('12321', 5), ('232', 3), ('0', 1), ('1', 1), ('2', 1), ('3', 1)]