【python】单词接龙

题目:

这是一个关于“单词接龙”的算法题目。在这个游戏中,我们需要从给定的一组单词中,以特定的开头字母构造出一条最长的“龙”。每个单词在这条“龙”中最多出现两次。当两个单词相连时,它们的重合部分被合并成一个。例如,"beast"和"astonish"可以合并成"beastonish"。重要的是,相邻的两个单词之间不能存在包含关系,比如"at"和"atide"不能相连。

【python】单词接龙_第1张图片 

代码:

n = int(input().strip())
word = [input().strip() for _ in range(n)]
beginn = input().strip()

# 初始化一个列表,用于记录每个单词的使用次数
used = [0 for _ in range(n)]
# 初始化答案变量,用于存储最长字符串的长度
ans = 0

# 定义一个函数来检查两个字符串是否在给定长度k的情况下能够连接
def check(s, m, k):
    return s[-k:] == m[:k]

# 定义一个函数来连接两个字符串,从第k个字符开始连接
def add(s, m, k):
    return s + m[k:]

# 定义一个深度优先搜索函数来递归地寻找最长的字符串
def dfs(now):
    global ans
    x = len(now)
    ans = max(ans, x)
    for i in range(n):
        # 如果某个单词使用次数超过2次,则跳过
        if used[i] >= 2:
            continue
        maxk = len(word[i])
        for j in range(1, maxk + 1):
            # 如果当前字符串now和word[i]能在j长度下连接,则进行连接
            if check(now, word[i], j):
                temp = add(now, word[i], j)
                # 如果连接后的字符串与当前字符串相同,则跳过 包含了
                if temp == now:
                    continue
                used[i] += 1
                dfs(temp)
                used[i] -= 1


# 从起始单词开始递归搜索
dfs(beginn)
# 输出最长字符串的长度
print(ans)

 

你可能感兴趣的:(python,开发语言,算法,1024程序员节,数据结构)