如何在华为OD机试中获得满分?Java实现【寻找相似单词】一文详解!

news/2024/10/30 11:28:01/

请添加图片描述

✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)

文章目录

  • 1. 题目描述
    • 2. 输入描述
    • 3. 输出描述
    • 4. Java算法源码
    • 5. 测试
    • 6.解题思路

1. 题目描述

给定一个可存储若干单词的字典,找出指定单词的所有相似单词,并且按照单词名称从小到大排序输出。

单词仅包括字母,但可能大小写并存(大写不一定只出现在首字母)

相似单词说明:
给定一个单词X,如果通过任意交换单词中字母的位置得到不同的单词Y,那么定义Y是X的相似单词,如abc、bca即为相似单词(大小写是不同的字母,如a和A算两个不同字母)

字典序排序: 大写字母<小写字母。同样大小写的字母,遵循26字母顺序大小关系。即A<B<C<…<X<Y<Z<a<b<c<…<x<y<z。

如Bac<aBc<acB<cBa。

2. 输入描述

第一行为给定的单词个数N(N为非负整数);
从第二行到第N+1行是具体的单词(每行一个单词);
最后一行是指定的待检测单词(用于检测上面给定的单词中哪些是与该指定单词是相似单词,该单词可以不是上面给定的单词)

3. 输出描述

从给定的单词组中,找出指定单词的相似单词,并且按照从小到大字典序排列输出,中间以空格隔开;
如果不存在,则输出null(字符串null)。

4. Java算法源码

 public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();String[] words = new String[n];for (int i = 0; i < n; i++) {words[i] = scanner.next();}String targetWord = scanner.next();List<String> similarWords = findSimilarWords(words, targetWord);if (similarWords.isEmpty()) {System.out.println("null");} else {Collections.sort(similarWords);System.out.println(String.join(" ", similarWords));}}private static List<String> findSimilarWords(String[] words, String targetWord) {List<String> similarWords = new ArrayList<>();for (String word : words) {if (isSimilar(word, targetWord)) {similarWords.add(word);}}return similarWords;}private static boolean isSimilar(String word1, String word2) {if (word1.length() != word2.length()) {return false;}int[] count1 = new int[26];int[] count2 = new int[26];for (int i = 0; i < word1.length(); i++) {char c1 = word1.charAt(i);char c2 = word2.charAt(i);if (c1 >= 'A' && c1 <= 'Z') {count1[c1 - 'A']++;} else {count1[c1 - 'a']++;}if (c2 >= 'A' && c2 <= 'Z') {count2[c2 - 'A']++;} else {count2[c2 - 'a']++;}}for (int i = 0; i < 26; i++) {if (count1[i] != count2[i]) {return false;}}return true;}

5. 测试

在这里插入图片描述

6.解题思路

在这里插入图片描述

  1. 读取输入的单词个数 N
  2. 创建一个长度为 N 的字符串数组 words,并读取输入的单词。
  3. 读取输入的待检测单词 targetWord
  4. 创建一个空的字符串列表 similarWords 用于存储相似单词。
  5. 调用 findSimilarWords 方法,传入单词数组 words 和待检测单词 targetWord,获取相似单词列表 similarWords
  6. 如果 similarWords 列表为空,输出字符串 “null”。
  7. 否则,对 similarWords 列表进行字典序排序。
  8. 使用字符串连接方法将 similarWords 列表中的相似单词按空格连接成一个字符串,并输出。
    在这里插入图片描述

http://www.ppmy.cn/news/88957.html

相关文章

jetson nano csi摄像头 tensorrt 运行yolov8检测

jetson nano csi摄像头 tensorrt 运行yolov8检测 1. 在本地电脑训练环境下将onnx模型导出yolov8 导出onnx 模型使用onnxsim优化onnx 模型2. 在jetson nano下 转换到tensorrt模型配置好环境后 使用trtexec 生成engine使用python tensorrt 读取csi摄像头进行预测1. 在本地电脑训练…

项目跟踪的好处有哪些?项目经理必须了解

项目跟踪要跟踪什么呢&#xff1f;主要针对计划、任务和项目成员三个方面&#xff0c;是为了了解项目的实际进展情况而进行。 在跟踪过程中我们会发现项目计划的不当之处&#xff0c;促使我们去改进和完善计划&#xff1b;发现项目风险&#xff0c;及时解决问题&#xff1b;了…

python---变量(1)

EG:计算方差 1.先把这一组数的平均值计算出来&#xff08;后面会反复使用&#xff09; 2.针对每个数字&#xff0c;分别计算数字和平均值的差&#xff0c;再平方。 3.把2中的平方值相加 4.总和/&#xff08;项数-1&#xff09; 下面我们开始实现这个代码&#xff01; 代码运行…

《汇编语言》- 读书笔记 - 实验5 编写、调试具有多个段的程序

《汇编语言》- 读书笔记 - 实验5 编写、调试具有多个段的程序 题目1题目2题目3题目4题目5题目6总结 题目1 将下面的程序编译、连接&#xff0c;用 Debug 加载、跟踪&#xff0c;然后回答问题 assume cs:code, ds:data, ss:stack data segmentdw 0123h,0456h,0789h,0abch,0def…

并行计算技术解密:MPI和OpenMP的学习和应用指南

欢迎来到并行计算技术的奇妙世界&#xff01;本指南将带您深入了解MPI&#xff08;Message Passing Interface&#xff09;和OpenMP&#xff08;Open Multi-Processing&#xff09;两种重要的并行计算技术&#xff0c;并为您提供学习和应用的指南。无论您是一个科研工作者、开发…

分布式事务的21种武器 - 5

在分布式系统中&#xff0c;事务的处理分布在不同组件、服务中&#xff0c;因此分布式事务的ACID保障面临着一些特殊难点。本系列文章介绍了21种分布式事务设计模式&#xff0c;并分析其实现原理和优缺点&#xff0c;在面对具体分布式事务问题时&#xff0c;可以选择合适的模式…

【CloudCompare教程】008:基于点云的三维模型重建(泊松重建)

本文讲述基于点云的三维模型重建方法,PoissonRecon是“Poisson Surface Reconstruction”的缩写,它是由约翰霍普金斯大学的Misha Kazhdan47提出的三角形网格生成算法的简单接口。 文章目录 一、加载点云二、计算法向量三、泊松建模四、利用输出密度一、加载点云 加载兔子点云…

使用亚马逊云科技Amazon VPC Lattice简化服务间的连接、安全和监控

在亚马逊云科技re:Invent 2022中&#xff0c;亚马逊云科技介绍了Amazon VPC Lattice预览版&#xff0c;这是Amazon Virtual Private Cloud&#xff08;Amazon VPC&#xff09;的一项新功能&#xff0c;可通过一致的方式连接、保护和监控服务之间的通信。借助Amazon VPC Lattice…