最短的字符串包含几个蛮力

时间:2017-03-15 18:54:42

标签: python itertools brute-force

所以我试图用蛮力来解决这个问题: 我得到一个随机数的随机字符串,我应该找到最短字符串的长度 包含收到的所有字符串。

实施例: 全日空 海士 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)

0 个答案:

没有答案