本文实例为大家分享了python实现寻找最长回文子序列,这一类的问题可以使用动态规划的方法去做,我之前应该有几篇博文都是关于回文序列的求解的,正好有可以复用的代码就懒得再用别的方法写了,直接套用,思想还是滑窗切片,很简单就是运算会多点,下面是具体实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
#!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:寻找最长回文子序列 ''' def slice_window(one_str,w = 1 ): ''''' 滑窗函数 ''' res_list = [] for i in range ( 0 , len (one_str) - w + 1 ): res_list.append(one_str[i:i + w]) return res_list def is_huiwen(one_str_list): ''''' 输入一个字符串列表,判断是否为回文序列 ''' if len (one_str_list) = = 1 : return True else : half = len (one_str_list) / 2 if len (one_str_list) % 2 = = 0 : first_list = one_str_list[:half] second_list = one_str_list[half:] else : first_list = one_str_list[:half] second_list = one_str_list[half + 1 :] if first_list = = second_list[:: - 1 ]: return True else : return False def find_longest_sub_palindrome_str(one_str): ''''' 主函数,寻找最长回文子序列 ''' all_sub = [] for i in range ( 1 , len (one_str)): all_sub + = slice_window(one_str,i) all_sub.append(one_str) new_list = [] for one in all_sub: if is_huiwen( list (one)): new_list.append(one) new_list.sort( lambda x,y: cmp ( len (x), len (y)),reverse = True ) print new_list[ 0 ] if __name__ = = '__main__' : one_str_list = [ 'uabcdcbaop' , 'abcba' , 'dmfdkgbbfdlg' , 'mnfkabcbadk' ] for one_str in one_str_list: find_longest_sub_palindrome_str(one_str) |
结果如下:
abcdcba
abcba
bb
abcba
[Finished in 0.3s]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/Together_CZ/article/details/76694242