華為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.pswp.cn/bicheng/81052.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81052.shtml
英文地址,請注明出處:http://en.pswp.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…