【华为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
题目解析:
按逻辑来实现,加上自定义排序来处理即可
代码实现:
const readline = async () => (await iter.next()).value;
const rl = require("readline").createInterface({ input: process.stdin });
const iter = rl[Symbol.asyncIterator]();
function wordSort(wordsData) {
let length = wordsData.length;
for (let i = 0; i < length - 1; i++) {
for (let j = 0; j < length - 1; j++) {
if (wordsData[j].length < wordsData[j + 1].length) {
[wordsData[j], wordsData[j + 1]] = [wordsData[j + 1], wordsData[j]];
} else if (wordsData[j].length === wordsData[j + 1].length && wordsData[j] > wordsData[j + 1]) {
[wordsData[j], wordsData[j + 1]] = [wordsData[j + 1], wordsData[j]];
}
}
}
}
function wordChain(index, wordsData) {
let result = wordsData.splice(index, 1)[0];
wordSort(wordsData);
let last = result[result.length - 1];
while (wordsData.length > 0) {
let length = wordsData.length;
let mark = true;
for (let i = 0; i < length; i++) {
if (last === wordsData[i][0]) {
result += wordsData.splice(i, 1)[0];
last = result[result.length - 1];
mark = false;
break;
}
}
if (mark) {
break;
}
}
return result;
}
(async () => {
let index = parseInt(await readline());
let n = parseInt(await readline());
let wordsData = [];
for (let i = 0; i < n; i++) {
wordsData.push(await readline());
}
console.log(wordChain(index, wordsData));
rl.close();
})();