笔试题

将list中具有重复子串的str删除,保留最长子串

** 如图: **

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 本人采用了最简单的两次for循环暴力解决,
# 有人会说trie就可以搞定啊,但是似乎不能搞定哟
# 第二个原因是尽量用原生的简单方法搞定它

# 有什么好的方法,欢迎留言哟

# 去重且将排序,倒序
tmp = list(set(tmp))
tmp.sort(key=lambda x: len(x),reverse=True)
# 搜出子串
sub_str = []
for i in range(len(tmp)-1):
for j in range(i+1,len(tmp)):
if tmp[j] in tmp[i]:
sub_str.append(tmp[j])

# 得到最终的最长字符串
final_tmp = []
for i in tmp:
# 得到不在子串中且不是单个字符的数据
if i not in sub_str and len(i)>=2:
final_tmp.append(i)