题目
题目描述
有一组单词,请编写一个程序,在数组中找出由数组中字符串组成的最长的串A,即A是由其它单词组成的(可重复)最长的单词。
给定一个string数组str,同时给定数组的大小n。请返回最长单词的长度,保证题意所述的最长单词存在。
测试样例:
[“a”,“b”,“c”,“ab”,“bc”,“abc”],6
返回:3
思路
先对给出的字符串创建一个字典,并赋值True,然后在对字符串按长度大小排序,依次处理。
如先读入第一个最长的字符串,从一个字母开始拆分,如dict,
第一次拆分:d,ict
第二次:di,ct
第三次:dic,t
然后递归判断这些拆分的字符串是否在dict中,如不在给他加入字典赋值False,
知道返回True,说明字符串是由子串组成。
代码
class LongestString:
def getLongest(self,s, n):
s.sort(key=lambda i:len(i),reverse=True)
dict = {k:True for k in s}
for i in s:
if self.getLongest_rec(i,dict,True):
return len(i)
def getLongest_rec(self,key,dict,value):
if key in dict and not value:
return dict[key]
for i in range(len(key)):
if self.getLongest_rec(key[:i],dict,False) and self.getLongest_rec(key[i:],dict,False):
return True
dict[key] = False
return False