【华为机试】2023年真题B卷(python)-单词接龙

发布时间:2023年12月23日

一、题目

题目描述:

单词接龙的规则是:可用于接龙的单词首字母必须要前一个单词的尾字母相同;
当存在多个首字母相同的单词时,取长度最长的单词,如果长度也相等,则取字典序最小的单词;已经参与接龙的单词不能重复使用。
现给定一组全部由小写字母组成单词数组,并指定其中的一个单词作为起始单词,进行单词接龙,请输出最长的单词串,单词串是单词拼接而成,中间没有空格。

二、输入输出

输入描述:
输入的第一行为一个非负整数,表示起始单词在数组中的索引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)
文章来源:https://blog.csdn.net/u014481728/article/details/135163909
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。