当前位置: 首页 > article >正文

华为OD E卷(100分)44-单次接龙

 前言

        工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力,无聊之余打算用一些大厂的编程题练练手。希望通过这些分享能够帮到一些人,也希望能和看到此文的大神们沟通交流,提升自己,更希望在此期间能够找到一份理想的工作。

题目描述

       单词接龙的规则是:

  1. 可用于接龙的单词首字母必须要前一个单词的尾字母相同;
  2. 当存在多个首字母相同的单词时,取长度最长的单词,如果长度也相等,则取字典序最小的单词;
  3. 已经参与接龙的单词不能重复使用。

        现给定一组全部由小写字母组成单词数组,并指定其中的一个单词作为起始单词,进行单词接龙,请输出最长的单词串,单词串是单词拼接而成,中间没有空格。

输入

输入的第一行为一个非负整数,表示起始单词在数组中的索引K,0 <= K < N ;
输入的第二行为一个非负整数,表示单词的个数N;
接下来的N行,分别表示单词数组中的单词。

备注:
单词个数N的取值范围为[1, 20];
单个单词的长度的取值范围为[1, 30];

输出

       输出一个字符串,表示最终拼接的单词串。

示例 

示例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。

解题思路

       使用TreeSet存储单词,天然按字符顺序排序。

题解

Java实现

package huawei.e100;

import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

/**
* @author arnold
* @date 2025年1月2日
* 单次接龙

*/
public class T44 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			int index = sc.nextInt();
			int num = sc.nextInt();
			String start = null;
			Set<String> words = new TreeSet<>();
			sc.nextLine();
			for (int i = 0; i < num; i++) {
				String word = sc.nextLine().trim();
				words.add(word);
				if (i ==  index) {
					start = word;
				}
			}
			String s = run(words, start);
			System.out.println(s);
		}
	}
	
	static String run(Set<String> words, String start){
		StringBuilder sb = new StringBuilder();
		sb.append(start);
		words.remove(start);
		while(words.size() > 0 ) {
			Iterator<String> it = words.iterator();
			String next = null;
			while(it.hasNext()) {
				String w = it.next();
				if(w.charAt(0) == start.charAt(start.length()-1)) {
					if(next == null) {
						next = w;
					} else {
						if(w.length() > next.length()) {
							next = w;
						}
					}
				}
			}
			if(next != null) {
				sb.append(next);
				words.remove(next);
				start = next;
			} else {
				break;
			}
		}
		
		return sb.toString();
	}

}


http://www.kler.cn/a/464684.html

相关文章:

  • 深入浅出 Beam Search:自然语言处理中的高效搜索利器
  • ThinkPHP 模板引擎使用技巧:提高开发效率
  • 第四讲 比特币的主流化与价格波动
  • [python SQLAlchemy数据库操作入门]-24.使用 Celery 与 SQLAlchemy:异步任务处理股票数据
  • 互慧-急诊综合管理平台 ServicePage.aspx 任意文件读取漏洞复现
  • Spring Security(maven项目) 3.0.2.3版本
  • Docker图形化界面工具Portainer最佳实践
  • Unix/Linux 系统中环境变量有哪些
  • 两个等号和三个等号(待查资料)
  • Centos7部署NTP服务及客户端同步实践
  • 使用 4 种主要方法将数据从 HTC 传输到华为
  • 解决Spring3.4版本中使用QueryDSL中出现MongoAnnotationProcessor使用问题
  • Javascript算法——回溯算法(组合问题)
  • Oracle 使用 sql profile 固定执行计划
  • 国产编辑器EverEdit - 常用资源汇总
  • QT---------自定义插件和库
  • Unity3D Huatuo:零成本高性能的全平台原生C#热更新方案详解
  • 玩《燕云十六声》时游戏文件丢失怎么办?
  • RabbitMQ基础篇之Java客户端 Topic交换机
  • 基于VSCode软件框架的RISC-V IDE MRS2正式上线发布