首页 > 其他分享 >华为OD E卷(100分)44-单次接龙

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

时间:2025-01-02 15:26:12浏览次数:3  
标签:String 44 OD next 单词 start 接龙 words

 前言

        工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近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();
	}

}

标签:String,44,OD,next,单词,start,接龙,words
From: https://blog.csdn.net/arnold66/article/details/144887564

相关文章

  • Google Chrome cursor auto edit mode bug All In One
    GoogleChromecursorautotexteditmodebugAllInOneGoogleChrome光标自动进入文本编辑模式bugtextcursorbug问题分析:可能是清洁键盘的时候,不小心按到了F7键,导致自动开启了插入符号浏览模式solutionsPresstheF7keyofkeybaord,TurnOn/TurnOff......
  • 理解 QOverload<T>::of(&ClassName::MethodName);
    这段代码的语法是Qt信号与槽机制的现代实现方式之一,结合了C++11的lambda和模板特性。这里的QOverload是一个Qt提供的工具,用于解决Qt的信号和槽机制在多重重载函数时可能发生的歧义问题。以下是分解此代码的详解:1.connect的语法connect(sender,signal,re......
  • 2025/1/2 【双指针法】LeetCode27.移除元素 【√】 ❗未完结❗
    27.移除元素-力扣(LeetCode)代码随想录数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。Myanswer:快慢指针法classSolution:defremoveElement(self,nums:List[int],val:int)->int:n=len(nums)j=0forii......
  • 关于此题E - Maximize XOR(Atcoder ABC 386)搜索技巧的一些总结
    传送门题目要求n个数中选k个数异或起来最大,我们想到字典树中最大异或和这一经典问题,但是很明显字典树只能解决任选两个数的最大异或,而此题是任选k个,那我们走投无路只能考虑爆搜。首先可以很容易写出一个暴力的搜索:voiddfs1(longlongpos,longlongsum,longlongkk){i......
  • linux安装nodejs
    https://nodejs.org/en/下载nodejs后解压到一个目录添加环境变量#NodejsexportNODE_HOME=/opt/SoftWare/node-v10.16.0-linux-x64exportPATH=$PATH:$NODE_HOME/bin 使用国内镜像npminstall-gcnpm--registry=https://registry.npm.taobao.org 安装vue脚手架cnpm......
  • 论文阅读:Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
    Transformer可以接收一整段序列,然后使用self-attention机制来学习它们之间的依赖关系,但其在语言建模时受到固定长度上下文的限制(固定长度的输入、绝对位置编码的限制、注意力机制的计算复杂度)。Transformer-XL以此为基础,引入一个片段级递归机制和一种新的位置编码方案,从而可以在......
  • 项目44:简易拼写检查器【源代码】 --- 《跟着小王学Python·新手》
    项目44:简易拼写检查器—《跟着小王学Python·新手》《跟着小王学Python》是一套精心设计的Python学习教程,适合各个层次的学习者。本教程从基础语法入手,逐步深入到高级应用,以实例驱动的方式,帮助学习者逐步掌握Python的核心概念。通过开发游戏、构建Web应用、编写网络爬......
  • 使用JSONObject.getString()时报错:Cannot resolve method ‘getString‘ in ‘JSONObjec
    目录使用JSONObject.getString()时报错:Cannotresolvemethod'getString'in'JSONObject',JSONObject三种库的用法一、背景描述二、问题解决1、使用org.json.JSONObject读取属性2、使用org.json.simple.JSONObject读取属性3、使用cn.hutool.json.JSONObject读取属性三、......
  • Linux安装nodejs npm
    1、检查whereisnodejswhereisnpm2、下载wget-chttps://npm.taobao.org/mirrors/node/v12.12.0/node-v12.12.0-linux-x64.tar.xztar-xvfnode-v12.12.0-linux-x64.tar.xzmvnode-v12.12.0-linux-x64nodejsmv/root/nodejs//usr/sbin/3、配置软连接ln-s/usr/sbin/......
  • 51c自动驾驶~合集44
    我自己的原文哦~   https://blog.51cto.com/whaosoft/12969097#TowardsGeneralistRobotPolicies清华大学&字节|迈向通用机器人策略:如何选择VLA?论文标题:TowardsGeneralistRobotPolicies:WhatMattersinBuildingVision-Language-ActionModels论文链接:https......