华为OD机试真题——单词接龙(首字母接龙)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
2025 A卷 100分 题型
本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》
华为OD机试真题《单词接龙(首字母接龙)》:
文章快捷目录
题目描述及说明
Java
python
JavaScript
C++
C
GO
题目名称:单词接龙(首字母接龙)
知识点:字符串、贪心算法、逻辑处理
时间限制:1秒
空间限制:256MB
限定语言:不限
题目描述
给定一组由小写字母组成的单词数组,并指定其中一个单词作为起始单词,按照以下规则进行单词接龙,输出最长的拼接字符串(无空格):
- 接龙规则:每个后续单词的首字母必须与前一个单词的尾字母相同。
- 选择优先级:当存在多个可选单词时,优先选择长度最长的;若长度相同,则选择字典序最小的。
- 去重规则:已使用的单词不可重复使用。
输入描述:
- 第一行为起始单词的索引 K(0 ≤ K
- 第二行为单词总数 N(1 ≤ N ≤ 20)。
- 后续 N 行,每行一个单词(长度1~30)。
输出描述:
拼接后的最长单词串。
示例:
输入:
0 6 word dd da dc dword d
输出:
worddwordda
解释:起始单词 word → 接 dword(最长且首字母为 d)→ 剩余可选 dd、da、dc,选择字典序最小的 da。
Java
问题分析
题目要求根据给定的单词列表,从指定起始单词开始,按照首尾字母相同的规则进行接龙,选择时优先选最长的单词,长度相同则选字典序最小的,且每个单词只能用一次。目标是找到最长的拼接字符串。
解题思路
- 深度优先搜索(DFS):遍历所有可能的路径,记录最长拼接字符串。
- 贪心剪枝:在每一步中按优先级处理候选单词(长度优先,字典序次之),尝试快速找到最优解。
- 回溯:标记已使用的单词,递归结束后恢复状态,确保其他路径可被探索。
代码实现
import java.util.*; public class Main { private static String maxStr = ""; // 存储最长结果 private static int maxLen = 0; // 最长字符串长度 private static int totalLen = 0; // 所有单词总长度(用于剪枝) public static void main(String[] args) { Scanner sc = new Scanner(System.in); int k = Integer.parseInt(sc.nextLine()); // 起始单词索引 int n = Integer.parseInt(sc.nextLine()); // 单词总数 String[] words = new String[n]; for (int i = 0; i maxLen || (currentLen == maxLen && currentStr.compareTo(maxStr)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。