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

【华为OD题库-068】找出经过特定点的路径长度-java

题目

输入一个字符串,都是以大写字母组成,每个相邻的距离是1,第二行输入一个字符串,表示必过的点。
说明
每个点可过多次。求解经过这些必过点的最小距离是多少?
示例1
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
ANTSEDXQOKPUVGIFWHJLYMCRZB
ABC
输出
28

思路

本题不好理解,以示例数据为例,要经过ABC,必须走的路径是A->B->C,其中A->B的距离为25,b->c的距离为3,所以最后结果为28
题目描述太过简略,本文按照以下细节实现:

  1. 第一行和第二行均有可能含重复字符串
  2. 出发点并非起点
  3. 运动方向可随意变更,不能重复走原点。比如第二行输入ABBG,已经在第一个B了,需要找下一个B,而非自己

穷举所有可能性的组合,然后计算最短距离即可

题解

package hwod;import java.util.*;public class CrossSpecDotPath {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str1 = sc.nextLine();String targetStr = sc.nextLine();System.out.println(crossSpecDotPath(str1, targetStr));}private static Map<Character, List<Integer>> map = new HashMap<>(); //存放每个字符所有的索引位置private static int res = Integer.MAX_VALUE;private static int crossSpecDotPath(String originStr, String targetStr) {for (int i = 0; i < originStr.length(); i++) {List<Integer> oldList = map.getOrDefault(originStr.charAt(i), new ArrayList<>());oldList.add(i);map.put(originStr.charAt(i), oldList);}LinkedList<Integer> path = new LinkedList<>();//存放选择的路径dfs(path, targetStr, 0);return res;}private static void dfs(LinkedList<Integer> path, String targetStr, int distance) {if (targetStr.length() < 1) {//路径走完了if (distance < res) {res = distance;}return;}List<Integer> list = map.get(targetStr.charAt(0));//本次寻找的目标字符,可能出现在哪些位置for (int item : list) {if (!path.isEmpty() && path.peekLast() == item) continue;//不允许走原点if (!path.isEmpty()) distance += Math.abs(item - path.peekLast());//累加距离path.addLast(item);dfs(path, targetStr.substring(1), distance);//找下一个目标int lst = path.peekLast();path.removeLast();if (!path.isEmpty()) distance -= Math.abs(lst - path.peekLast());}}}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

http://www.lryc.cn/news/255707.html

相关文章:

  • 高性能队列框架-Disruptor使用、Netty结合Disruptor大幅提高数据处理性能
  • Linux学习笔记3 xshell(lnmp)
  • 分享几个可以免费使用GPT工具
  • 一篇文章带你快速入门 Nuxt.js 服务端渲染
  • 导入JDBC元数据到Apache Atlas
  • 大数据项目——基于Django/协同过滤算法的房源可视化分析推荐系统的设计与实现
  • [网鼎杯 2020 朱雀组]phpweb1
  • 深度学习之注意力机制
  • WordPress:解决xmlrpc.php被扫描爆破的风险
  • Fiddler抓包模拟器(雷电模拟器)
  • RepidJson将内容写入文件
  • Endnote使用教程
  • java中用Thead创建线程和用Runnable创建线程的区别是什么?
  • 0013Java程序设计-基于Vue的上课签到系统的设计与实现
  • 2.修改列名与列的数据类型
  • [Firefly-Linux] RK3568 Ubuntu固件分区详解
  • SpringBoot项目访问resources下的静态资源
  • Qt之面试经验
  • 数据库基础概念与范式反范式总结
  • tanstack/react-query使用手册
  • camera2对摄像头编码h264
  • Apache solr XXE 漏洞(CVE-2017-12629)
  • ​HTML代码混淆技术:原理、应用和实现方法详解
  • quickapp_快应用_系统接口应用
  • sqlmap400报错问题解决
  • 【S32DS报错】-2-提示Error while launching command:arm-none-eabi-gdb –version错误
  • Windows核心编程 HOOK
  • P4 Qt如何添加qss样式表文件和添加图片资源
  • 【华为OD题库-085】路灯照明II-Java
  • 附录1、vuepress中的Markdown语法