所以我试图用蛮力来解决这个问题: 我得到一个随机数的随机字符串,我应该找到最短字符串的长度 包含收到的所有字符串。
实施例: 全日空 海士 NAO
答案:6(最短的字符串是'amanao') 下面的代码解决了我的问题,但没有我想要的那么快,因为如果我测试更多的字符串(或更大的字符串),程序将永远结束。 我怎样才能改善这个?
def parse(arg):
strings=set()
superS=list()
for line in arg:
strings.add(str(line))
superS.append(line)
superS=''.join(superS)
return superS ,strings
def unique_permutations(iterable, r=None):
previous = tuple()
for p in itertools.permutations(sorted(iterable), r):
if p > previous:
previous = p
yield p
def answer(superS,strings):
for i in xrange(1,len(superS)+1):
for elem in unique_permutations(superS, i):
flag = 1
tt=''.join(elem)
for j in strings:
if j not in tt:
flag=0
break
if flag:
return len(tt)
rd=sys.stdin.read().splitlines()
a,b=parse(rd)
print answer(a,b)