Python 最短的字符串,通过蛮力包含多个字符串

Python 最短的字符串,通过蛮力包含多个字符串,python,itertools,brute-force,Python,Itertools,Brute Force,所以我试图用暴力解决这个问题: 我得到一个随机数的随机字符串,我应该找到最短字符串的长度 包含接收到的所有字符串 例如: 安娜 阿玛 脑 回答:6(最短的字符串是“amanao”) 下面的代码解决了我的问题,但没有我想要的那么快,因为如果我用更多的字符串(或更大的字符串)进行测试,程序将永远结束。 我该如何改进这一点 def parse(arg): strings=set() superS=list() for line in arg:

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

例如: 安娜 阿玛 脑

回答: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)

这就是“最短公共超弦”问题。这个搜索词应该会引导你进行大量的讨论和示例代码。@jasonharper我尝试过一些搜索,但由于不知道要搜索什么,所以没有成功。非常感谢。这可能是“最短公共超弦”问题的重复。这个搜索词应该会引导你进行大量的讨论和示例代码。@jasonharper我尝试过一些搜索,但由于不知道要搜索什么,所以没有成功。非常感谢。可能重复的