华为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
限定语言:不限


题目描述

给定一组由小写字母组成的单词数组,并指定其中一个单词作为起始单词,按照以下规则进行单词接龙,输出最长的拼接字符串(无空格):

  1. 接龙规则:每个后续单词的首字母必须与前一个单词的尾字母相同。
  2. 选择优先级:当存在多个可选单词时,优先选择长度最长的;若长度相同,则选择字典序最小的。
  3. 去重规则:已使用的单词不可重复使用。

输入描述

  • 第一行为起始单词的索引 K(0 ≤ K < N)。
  • 第二行为单词总数 N(1 ≤ N ≤ 20)。
  • 后续 N 行,每行一个单词(长度1~30)。

输出描述
拼接后的最长单词串。

示例
输入:

0  
6  
word  
dd  
da  
dc  
dword  
d  

输出:

worddwordda  

解释:起始单词 word → 接 dword(最长且首字母为 d)→ 剩余可选 dddadc,选择字典序最小的 da


Java

问题分析

题目要求根据给定的单词列表,从指定起始单词开始,按照首尾字母相同的规则进行接龙,选择时优先选最长的单词,长度相同则选字典序最小的,且每个单词只能用一次。目标是找到最长的拼接字符串。


解题思路

  1. 深度优先搜索(DFS):遍历所有可能的路径,记录最长拼接字符串。
  2. 贪心剪枝:在每一步中按优先级处理候选单词(长度优先,字典序次之),尝试快速找到最优解。
  3. 回溯:标记已使用的单词,递归结束后恢复状态,确保其他路径可被探索。

代码实现

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 < n; i++) {words[i] = sc.nextLine().trim();}// 计算所有单词总长度for (String word : words) {totalLen += word.length();}boolean[] used = new boolean[n]; // 记录单词是否被使用String startWord = words[k];used[k] = true;maxStr = startWord;maxLen = startWord.length();dfs(startWord, startWord.charAt(startWord.length() - 1), used, words, startWord.length());System.out.println(maxStr);}private static void dfs(String currentStr, char lastChar, boolean[] used, String[] words, int usedLen) {// 更新最长结果int currentLen = currentStr.length();if (currentLen > maxLen || (currentLen == maxLen && currentStr.compareTo(maxStr) < 0)) {maxStr = currentStr;maxLen = currentLen;}// 剪枝:当前长度 + 剩余单词总长度 <= 已找到的最大长度,无需继续int remaining = totalLen - usedLen;if (currentLen + remaining <= maxLen) {return;}// 收集所有可用的候选单词(首字母匹配且未被使用)List<Candidate> candidates = new ArrayList<>();for (int i = 0; i < words.length; i++) {if (!used[i] && words[i].charAt(0) == lastChar) {candidates.add(new Candidate(words[i], i));}}// 按长度降序、字典序升序排序Collections.sort(candidates, (a, b) -> {if (a.word.length() != b.word.length()) {return Integer.compare(b.word.length(), a.word.length());} else {return a.word.compareTo(b.word);}});// 递归处理每个候选for (Candidate c : candidates) {String word = c.word;int idx = c.index;used[idx] = true; // 标记为已用dfs(currentStr + word, word.charAt(word.length() - 1), used, words, usedLen + word.length());used[idx] = false; // 回溯}}// 辅助类,记录单词及其索引static class Candidate {String word;int index;Candidate(String word, int index) {this.word = word;this.index = index;}}
}

代码解析

  1. 全局变量

    • maxStr:记录当前最长的拼接字符串。
    • maxLen:记录最长字符串的长度。
    • totalLen:所有单词的总长度,用于剪枝。
  2. 输入处理

    • 读取起始索引 k 和单词列表,初始化 used 数组标记起始单词为已使用。
  3. DFS函数

    • 更新最长字符串:比较当前拼接长度,更新 maxStrmaxLen
    • 剪枝:若当前长度加上剩余单词总长度无法超过已知最长长度,提前返回。
    • 候选单词收集:筛选所有首字母匹配且未被使用的单词。
    • 排序:按长度降序和字典序升序排列候选单词。
    • 递归处理:依次选择每个候选单词,标记为已用,递归调用后回溯。
  4. Candidate类

    • 记录单词及其索引,方便排序后回溯时恢复状态。<

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/81052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序智能商城系统(uniapp+Springboot后端+vue管理端)

一、系统介绍 本智能商城系统是基于当今主流技术栈开发的一款多端商城解决方案&#xff0c;主要包括微信小程序前端、SpringBoot 后端服务以及 Vue 管理后台三大部分。系统融合了线上商城的核心功能&#xff0c;支持商品浏览、下单、支付、订单管理等操作&#xff0c;适用于中小…

Python笔记:c++内嵌python,c++主窗口如何传递给脚本中的QDialog,使用的是pybind11

1. 问题描述 用的是python 3.8.20, qt版本使用的是5.15.2, PySide的版本是5.15.2, pybind11的版本为2.13.6 网上说在python脚本中直接用PySide2自带的QWinWidget&#xff0c;如from PySide2.QtWinExtras import QWinWidget&#xff0c;但我用的版本中说没有QWinWidget&#x…

软考软件设计师中级——软件工程笔记

1.软件过程 1.1能力成熟度模型&#xff08;CMM&#xff09; 软件能力成熟度模型&#xff08;CMM&#xff09;将软件过程改进分为以下五个成熟度级别&#xff0c;每个级别都定义了特定的过程特征和目标&#xff1a; 初始级 (Initial)&#xff1a; 软件开发过程杂乱无章&#xf…

C# SQLite基本使用示例

目录 1 基本使用流程 1.1 步骤1&#xff1a;添加SQLite依赖 1.2 ​步骤2&#xff1a;建立连接 1.3 步骤3&#xff1a;执行SQL命令 1.4 步骤4&#xff1a;查询数据 1.5 步骤5&#xff1a;使用事务 2 SQLite基本使用示例 2.1 准备工作 2.2 完整示例 2.3 案例代码解析 …

视频图像压缩领域中 DCT 的 DC 系数和 AC 系数详解

引言 在数字图像与视频压缩领域&#xff0c;离散余弦变换&#xff08;Discrete Cosine Transform, DCT&#xff09;凭借其卓越的能量集中特性&#xff0c;成为JPEG、MPEG等国际标准的核心技术。DCT通过将空域信号映射到频域&#xff0c;分离出DC系数&#xff08;直流分量&…

对抗系统熵增:从被动救火到主动防御的稳定性实战

&#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》&#xff08;基础篇&#xff09;、&#xff08;进阶篇&#xff09;、&#xff08;架构篇&#xff09;清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、…

java 中 DTO 和 VO 的核心区别

DTO 和 VO 的核心区别 特性DTO&#xff08;数据传输对象&#xff09;VO&#xff08;视图对象&#xff09;设计目的服务层与外部系统&#xff08;如前端、其他服务&#xff09;之间的数据传输为前端展示层定制数据&#xff0c;通常与 UI 强绑定数据内容可能包含业务逻辑需要的字…

数据结构【二叉树的遍历实现】

&#x1f4d8;考研数据结构基础&#xff1a;二叉树的存储、遍历与队列辅助实现详 在数据结构的学习中&#xff0c;二叉树作为一种结构清晰、应用广泛的树形结构&#xff0c;是考研计算机专业课中重点内容之一。本文将以实际代码为基础&#xff0c;介绍二叉树的存储结构、遍历方…

无人机俯视风光摄影Lr调色预设,手机滤镜PS+Lightroom预设下载!

调色详情 无人机俯视风光摄影 Lr 调色是利用 Adobe Lightroom 软件&#xff0c;对无人机从俯视角度拍摄的风光照片进行后期处理的调色方式。通过调整色彩、对比度、光影等多种参数&#xff0c;能够充分挖掘并强化画面独特视角下的壮美与细节之美&#xff0c;让原本平凡的航拍风…

【springcloud学习(dalston.sr1)】Eureka服务端集群的搭建(含源代码)(二)

该系列项目整体介绍及源代码请参照前面写的一篇文章【springcloud学习(dalston.sr1)】项目整体介绍&#xff08;含源代码&#xff09;&#xff08;一&#xff09; 这篇文章主要介绍多个eureka服务端的集群环境是如何搭建的。 &#xff08;一&#xff09;eureka的简要说明 Eu…

互联网大厂Java求职面试实战:Spring Boot微服务与数据库优化详解

&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通 &#x1f601; 2. 毕业设计专栏&#xff0c;毕业季咱们不慌忙&#xff0c;几百款毕业设计等你选。 ❤️ 3. Python爬虫专栏…

事件驱动reactor的原理与实现

fdset 集合&#xff1a;&#xff08;就是说&#xff09; fd_set是一个位图&#xff08;bitmap&#xff09;结构 每个位代表一个文件描述符 0表示不在集合中&#xff0c;1表示在集合中 fd_set结构&#xff08;简化&#xff09;&#xff1a; [0][1][2][3][4][5]...[1023] …

一分钟在Cherry Studio和VSCode集成火山引擎veimagex-mcp

MCP的出现打通了AI模型和外部数据库、网页API等资源&#xff0c;成倍提升工作效率。近期火山引擎团队推出了 MCP Server SDK&#xff1a; veimagex-mcp。本文介绍如何在Cherry Studio 和VSCode平台集成 veimagex-mcp。 什么是MCP MCP&#xff08;Model Context Protocol&…

掌控随心 - 服务网格的流量管理艺术 (Istio 实例)

掌控随心 - 服务网格的流量管理艺术 (Istio 实例) 想象一下,没有服务网格的时候,我们要实现像“将 1% 的用户流量导入到新版本应用”、“根据用户设备类型访问不同后端”、“模拟下游服务故障”这类高级流量策略,通常需要在代码、负载均衡器、API 网关等多个地方进行复杂且分…

[ARM][汇编] 01.基础概念

目录 1.全局标号 1.1.使用方法 1.1.1.声明全局标号 1.1.2.定义全局标号 1.1.3.引用全局标号 1.2.全局标号与局部标号的区别 1.3.注意事项 2.局部标号 2.1.使用方法 2.1.1.定义局部标号 2.1.2.跳转引用 2.2.局部标号与全局标号的对比 2.3.注意事项 3.符号定义伪指…

如何使用远程桌面控制电脑

目的&#xff1a; 通过路由器使用pc控制台式机&#xff0c;实现了有线/无线pc与台式机的双向远程桌面控制 最核心就两条&#xff1a;get ip地址与被控制机器的账户与密码。 现象挺神奇&#xff1a;被控制电脑的电脑桌面处于休眠模式&#xff0c;此时强行唤醒被控电脑会导致中断…

Hive表JOIN性能问

在处理100TB的Hive表JOIN性能问题时&#xff0c;需采用分层优化策略&#xff0c;结合数据分布特征、存储格式和计算引擎特性。以下是系统性优化方案&#xff1a; 1. 数据倾斜优化&#xff08;Skew Join&#xff09; 1.1 识别倾斜键 方法&#xff1a;统计JOIN键的分布频率&…

MongoDB 的核心概念(文档、集合、数据库、BSON)是什么?

MongoDB 是一个面向文档的数据库&#xff0c;它的核心概念与传统的关系型数据库&#xff08;RDBMS&#xff09;有所不同。以下是它的四个主要核心概念&#xff1a; 文档 (Document) 定义&#xff1a; 文档是 MongoDB 中的基本数据单元。它类似于关系型数据库中的一行记录&#…

AI智慧公园管理方案:用科技重塑市民的“夜游体验”

AI智慧公园管理方案&#xff1a;多场景智能巡检与安全防控 一、背景与痛点分析 夏季夜间&#xff0c;公园成为市民休闲娱乐的核心场所&#xff0c;但管理难度随之激增&#xff1a; 宠物管理失控&#xff1a;未牵绳宠物进入园区&#xff0c;随地排泄、惊扰游客&#xff0c;甚…

Spring Cloud Gateway 聚合 Swagger 文档:一站式API管理解决方案

前言 在微服务架构中&#xff0c;随着服务数量的增加&#xff0c;API文档管理变得越来越复杂。每个微服务都有自己的Swagger文档&#xff0c;开发人员需要记住每个服务的文档地址&#xff0c;这无疑增加了开发难度。本文将介绍如何使用Spring Cloud Gateway聚合所有微服务的Sw…