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

OD机试真题-单词接龙

题自描述

单词接龙Q的规则是:

·可用于接龙的单词首字母必须要前一个单词的尾字母相同

当存在多个首字母相同的单词时,取长度最长的单词,如果长度也相等,则取字典序最小的单词·已经参与接龙的单词不能重复使用

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

输入描述

输入的
第一行为一个非负整数,表示起始单词在数组中的索引K(0≤K<N)
第二行为一个非负整数,表示单词的个数 N

接下来的 N 行,分别表示单词数组中的单词

补充说明:

  • 单词个数 N 的取值范围为[1,20];

  • 单个单词的长度的取值范围为[1,301;

输出描述

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

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

题解

构成一个自定义的 CString 继承 Compare 接口,定义上述比较规则

源码 Java

import java.util.*;public class PhraseLong {static Input input;static {input = new Input("0\n" +"6\n" +"word\n" +"dd\n" +"da\n" +"dc\n" +"dword\n" +"d");input = new Input("4\n" +"6\n" +"Word\n" +"dd\n" +"da\n" +"dc\n" +"dword\n" +"d");}public static void main(String[] args) {int index = Integer.parseInt(input.nextLine());int count = Integer.parseInt(input.nextLine());Map<Character, List<CString>> map = new HashMap<>() ;String first = "";for (int i = 0; i < count; i++) {String word = input.nextLine();if (index == i) {first = word;continue;}List<CString> orDefault = map.getOrDefault(word.charAt(0), new ArrayList<>());orDefault.add(new CString(word));map.put(word.charAt(0), orDefault);}for (Map.Entry<Character, List<CString>> entry : map.entrySet()) {List<CString> value = entry.getValue();Collections.sort(value);}Character ch = first.charAt(first.length() - 1);StringBuilder sb = new StringBuilder(first);while (ch != null) {List<CString> cStrings = map.get(ch);if (cStrings == null || cStrings.size() == 0) {break;}CString remove = cStrings.remove(0);sb.append(remove.value);ch = remove.value.charAt(remove.value.length() - 1);}System.out.println(sb.toString());}static class CString implements Comparable<CString> {public String value;public CString(String value) {this.value = value;}public int compareTo(CString o) {if (this.value.charAt(0) != o.value.charAt(0)) {return	this.value.compareTo(o.value);}if (this.value.length() != o.value.length()) {return o.value.length() - this.value.length();}return this.value.compareTo(o.value);}}
}

http://www.mrgr.cn/news/60035.html

相关文章:

  • redis详细教程(3.hash和set类型)
  • 【SpringCloud】 K8s的滚动更新中明明已经下掉旧Pod,还是会把流量分到了不存活的节点
  • HarmonyOS ArkTS与C++数据类型转换
  • 凡客平台接口技术详解及代码示例
  • Apache HttpClient 和 OkHttpClient 的使用
  • GCN+BiLSTM多特征输入时间序列预测(Pytorch)
  • (7) cuda异常处理
  • 关于科学计算法 二进制 十进制 16进制 8进制的换算
  • RN的 Button 组件没有 style 属性
  • 微调大模型-4-合并基座模型
  • Supabase:当开源遇上实时数据库服务
  • 进程间通信初识:管道
  • Atlas800昇腾服务器(型号:3000)—SwinTransformer等NPU推理【图像分类】(九)
  • 计算结构体及其中元素的大小
  • Semantic Kernel进阶:创建和管理聊天(ChatCompletion)历史记录对象(四)
  • Linux:认识文件
  • PCL 基于法向量夹角提出错误匹配点对
  • shodan4,挂黑网站查找,弱口令网站搜索
  • 图---java---黑马
  • 【H2O2|全栈】CSS案例章节(一)——圣杯布局和双飞翼布局
  • spring boot 整合Knife4j
  • 【最新】Kali Linux虚拟机安装与优化全攻略:必做设置让你事半功倍!
  • python print常见用法
  • 【鸿蒙开发 | 端云一体化 —— 开发app不要在为没有后端而烦恼了,端云一体化帮你完成一站式开发!】
  • 自动化结账测试:使用 Playwright确保电商支付流程的无缝体验【nodejs]
  • 【力扣】[Java版] 刷题笔记-101. 对称二叉树