题目描述:
单词接龙的规则是:可用于接龙的单词首字母必须要前一个单词的尾字母相同;
当存在多个首字母相同的单词时,取长度最长的单词,如果长度也相等,则取字典序最小的单词;已经参与接龙的单词不能重复使用。
现给定一组全部由小写字母组成单词数组,并指定其中的一个单词作为起始单词,进行单词接龙,请输出最长的单词串,单词串是单词拼接而成,中间没有空格。
输入描述:
输入的第一行为一个非负整数,表示起始单词在数组中的索引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_t
return 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_word
words = [x for x in words if x != next_word] # 从原记录中删除第一个单词
next_word = get_word(words, next_word)
print(result)