怎么找人做动漫视频网站,建设网站的发布与推广,西安网站建设首选,wordpress用户会员插件题目#xff1a; 这是一个关于“单词接龙”的算法题目。在这个游戏中#xff0c;我们需要从给定的一组单词中#xff0c;以特定的开头字母构造出一条最长的“龙”。每个单词在这条“龙”中最多出现两次。当两个单词相连时#xff0c;它们的重合部分被合并成一个。例如…题目 这是一个关于“单词接龙”的算法题目。在这个游戏中我们需要从给定的一组单词中以特定的开头字母构造出一条最长的“龙”。每个单词在这条“龙”中最多出现两次。当两个单词相连时它们的重合部分被合并成一个。例如beast和astonish可以合并成beastonish。重要的是相邻的两个单词之间不能存在包含关系比如at和atide不能相连。 代码
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 ansx len(now)ans max(ans, x)for i in range(n):# 如果某个单词使用次数超过2次则跳过if used[i] 2:continuemaxk 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:continueused[i] 1dfs(temp)used[i] - 1# 从起始单词开始递归搜索
dfs(beginn)
# 输出最长字符串的长度
print(ans)