一、题目
题目描述:
单词接龙的规则是:可用于接龙的单词首字母必须要前一个单词的尾字母相同;
当存在多个首字母相同的单词时,取长度最长的单词,如果长度也相等,则取字典序最小的单词;已经参与接龙的单词不能重复使用。
现给定一组全部由小写字母组成单词数组,并指定其中的一个单词作为起始单词,进行单词接龙,请输出最长的单词串,单词串是单词拼接而成,中间没有空格。
二、输入输出
输入描述:
输入的第一行为一个非负整数,表示起始单词在数组中的索引K,0 <= K < N ;
输入的第二行为一个非负整数,表示单词的个数N;
接下来的N行,分别表示单词数组中的单词。
输出描述:
输出一个字符串,表示最终拼接的单词串。
三、示例
示例1:
输入输出示例仅供调试,后台判题数据一般不包含示例
输入:
0
6
word
dd
da
dc
dword
d
输出
worddwordda
说明:
先确定起始单词word,再接以d开头的且长度最长的单词dword,剩余以d开头且长度最长的有dd、da、dc,则取字典序最小的da,所以最后输出worddwordda
示例2
输入输出示例仅供调试,后台判题数据一般不包含示例
输入:
4
6
word
dd
da
dc
dword
d
输出:
dwordda
说明:
先确定起始单词dword,剩余以d开头且长度最长的有dd、da、dc,则取字典序最小的da,所以最后输出dwordda。
备注:
单词个数N的取值范围为[1, 20];单个单词的长度的取值范围为[1, 30];
四、要求
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
五、解题思路
题目的思路很明确,我们只要模拟整个过程就可以了
六、参考代码
# -*- coding: utf-8 -*-
'''
@File : 2023-B-单词接龙.py
@Time : 2023/12/23 00:10:20
@Author : mgc
@Version : 1.0
@Desc : None
'''# import os
# import re
# import sys
# import copy
# import math
# import queue
# import functools
# from queue import Queue
# from collections import Counter, defaultdict# 获取下一个起始单词的方法
def get_word(words, start):result_t = []result = []lens = []start_str = start[-1] # 获取第一个单词的最一个字符# 循环获取以start_str开始的单词列表for word in words:if start_str == word[0]:result_t.append(word)lens.append(len(word)) # 记录单词长度else:continue# 如果获取的单词列表为空,则返回空值 if len(result_t) == 0:return ""# 如果获取的单词列表长度为1,则返回列表的第一个值 elif len(result_t) == 1:result = result_treturn result[0]# 如果获取的单词列表中有多个值,需要判断单词长度else:max_len = max(lens) # 取单词长度最大值for word in result_t: # 获取长度最大的单词列表if len(word) == max_len:result.append(word)result.sort() # 对单词列表进行排序return result[0] # 返回单词列表的第一个值n = int(input())
nums = int(input())
words = []
for i in range(nums):words.append(input())
next_word = words[n]
result = ""
# 当起始单词不为空时执行循环
while len(next_word) > 0:result = result + next_wordwords = [x for x in words if x != next_word] # 从原记录中删除第一个单词next_word = get_word(words, next_word)
print(result)