【华为OD】2024年C、D卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript
【华为OD】2024年C、D卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript-CSDN博客
JS、Java、C、C++、Python代码实现:
【华为OD】D卷真题100分: 单词接龙 JavaScript代码实现[思路+代码]-CSDN博客
【华为OD】D卷真题100分: 单词接龙 Java代码实现[思路+代码]-CSDN博客
【华为OD】D卷真题100分: 单词接龙 C语言代码实现[思路+代码]-CSDN博客
【华为OD】D卷真题100分: 单词接龙 C++代码实现[思路+代码]-CSDN博客
【华为OD】D卷真题100分: 单词接龙 python代码实现[思路+代码]-CSDN博客
题目描述:
单词接龙的规则是:可用于接龙的单词首字母必须要前一个单词的尾字母相同;当存在多个首字母相同的单词时,取长度最长的单词,如果长度也相等,则取字典序最小的单词;已经参与接龙的单词不能重复使用。
现给定一组全部由小写字母组成单词数组,并指定其中的一个单词作为起始单词,进行单词接龙,请输出最长的单词串,单词串是单词拼接而成,中间没有空格。
输入描述
输入的第一行为一个非负整数,表示起始单词在数组中的索引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];
7878688
+---+
3 | | ++ + +---|
| | | 3 + 6 + | + | +
| + | | + + + | + | +
| + | +---+ + + +++++ + + + | +
| + | + | + +----+ | | + + + | +
| + 3 | + | + + + 2 | | 2 + + + | +
| + | + | + + + | | + + + | +
| +---+ + | | | + ----+ | +---+ | | + | +
| | + | | | + | | | | | | + | +
| 1 | + | 8 | | + 1 | | | 1 | | 1 | | + | +
| | + | | | + | | | | | | | + | +
| +---+ + +---+ | ++---+ ++ +---+ +---+ | + | +
| | + | | | ++ | | |+ | +
|0 | + | 0 | 0 | ++ | 0 | |+ | +
| | + | | | ++ | | |+ | +
+---+ + +-------+ +---+| +|+ | +
+ + | +
0 1 2 3 4 5 6 7 8 9 10 11 12 + v: w u m u 1 0 2 4
题目解析:
按逻辑来实现,加上自定义排序来处理即可
代码实现:
def word_sort(words_data):
length = len(words_data)
for i in range(length - 1):
for j in range(length - 1):
if len(words_data[j]) < len(words_data[j + 1]):
words_data[j], words_data[j + 1] = words_data[j + 1], words_data[j]
elif len(words_data[j]) == len(words_data[j + 1]) and words_data[j] > words_data[j + 1]:
words_data[j], words_data[j + 1] = words_data[j + 1], words_data[j]
def word_chain(index, words_data):
result = words_data.pop(index)
word_sort(words_data)
last = result[-1]
while words_data:
length = len(words_data)
mark = True
for i in range(length):
if last == words_data[i][0]:
result += words_data.pop(i)
last = result[-1]
mark = False
break
if mark:
break
return result
if __name__ == '__main__':
index = int(input())
n = int(input())
words_data = [input() for i in range(n)]
print(word_chain(index, words_data))