华为机试 - 找出经过特定点的路径长度

news2025/1/10 2:58:29

目录

题目描述

输入描述

输出描述

用例

题目解析

算法源码


题目描述

输入描述

输入一个字符串,都是以大写字母组成,每个相邻的距离是 1,

第二行输入一个字符串,表示必过的点。

说明每个点可过多次。

输出描述

经过这些必过点的最小距离是多少

用例

输入

ANTSEDXQOKPUVGIFWHJLYMCRZB
ABC

输出28
说明

题目解析

感觉本题题目描述太简略了,缺少很多关键信息。

  • 第一行输入的字符串中是否有重复字母?
  • 第二行输入的字符串中是否有重复字母?
  • 运动起点在哪?一定是第一行第一个字母吗?(给出的用例无法解答该问题)
  • 运动方向变更逻辑是啥?随意变更,还是必须到达终点后折返?(给出的用例无法解答该问题)
  • 每个点可过多次,那么是否可以原地走?

因为题目没有这些关键信息,因此这道题目的难度就不确定了。

我是这样考虑的:

  • 第一行和第二行都可能出现重复字母
  • 运动起点必须从第一行输入的第一个字母开始
  • 运动方向可以随意变更
  • 允许原地走

这样的话,经过必过点的路径才能多样化,才有最小距离概念。

解题思路如下,首先统计第二行输入的必过点在第一行字符串中的索引位置,需要注意的是必过点可能在第一行中出现多次,我们都要统计到。

下面算法中,我们用points保存必过点信息,idxs保存必过点的索引信息。

接下来,通过dfs求解经过必过点的所有的可能路径。

之后计算这些路径的距离,即相邻两点求差绝对值,然后相加,需要注意的时,我们需要将从起点走到第一个必过点的距离也加入为路径距离。

然后,对所有路径距离进行排序,最小的就是题解。

自测用例:

ANTSEDXQOKPUVGIFWHJLYMCRZB
GUYA 

最小距离44

 

ANTSEDXQOKPUVGIFWHUJLYMCRZ
GUYA

 发现有两条路径

绿色路径更短,最小距离42

算法源码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

const lines = [];
rl.on("line", (line) => {
  lines.push(line);

  if (lines.length === 2) {
    const [str, subStr] = lines;

    const points = [];
    const idxs = [];

    const set = new Set(subStr);
    for (let i = 0; i < str.length; i++) {
      const char = str[i];
      if (set.has(char)) {
        points.push(char);
        idxs.push(i);
      }
    }

    var dfs = (n, m, path, res) => {
      if (path.length === m) {
        const pathStr = path.map((p) => points[p]).join("");
        if (pathStr === subStr) res.push([...path]);
        return;
      }

      for (let i = 0; i < n; i++) {
        path.push(i);
        dfs(n, m, path, res);
        path.pop();
      }
    };

    const res = [];
    dfs(points.length, subStr.length, [], res);

    const ans = res
      .map((path) => {
        const newPath = path.map((p) => idxs[p]);

        let sum = newPath[0];

        for (let i = 1; i < newPath.length; i++) {
          sum += Math.abs(newPath[i] - newPath[i - 1]);
        }

        return sum;
      })
      .sort((a, b) => a - b)[0];

    console.log(ans);

    lines.length = 0;
  }
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21696.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

精益(Lean)与ERP实施

周四、五看完了24小时不停的Lean Global Connection&#xff0c;总觉得要说些什么。 印象最深的有三个地方&#xff1a; 一是John Shook的话&#xff0c;他说Lean是一种Mindset。 这种Mindset是&#xff1a; 一种积极的态度&#xff0c;Problems solving, 把问题和挑战当成是…

Web 性能优化:TLS

个人博客 Web 性能优化&#xff1a;TCP&#x1f3af; Web 性能优化&#xff1a;TLSWeb 性能优化&#xff1a;HTTP “do it, do it work, do it better … and secure ☠️” 随着追逐利益而来的恶意参与者越来越多&#xff0c;当前的 Web 应用&#xff0c;已经从野蛮生长转而…

【通关MySQL】Java的JDBC编程

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f6f0;️&#x1f6f0;️系列专栏:【通关MySQL】 ✈️✈️本篇内容:Java的JDBC编程。 &#x1f680;&#x1f680;代码存放仓库gitee&#xff1a;MySQL码云存放&#xff01; ⛵⛵作者简介&#xff…

[附源码]java毕业设计-室内田径馆预约管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

轻量应用服务器和云服务器CVM有什么区别?

腾讯云新推出的轻量应用服务器Lighthouse和原来的CVM云服务器有什么区别&#xff1f;轻量应用服务器Lighthouse是一种易于使用和管理、适合承载轻量级业务负载的云服务器&#xff0c;主要用于Web网站应用&#xff0c;轻量服务器使用及后期运维更加简单方便&#xff1b;云服务器…

RNA-seq 保姆教程:差异表达分析(二)

介绍 RNA-seq 目前是测量细胞反应的最突出的方法之一。RNA-seq 不仅能够分析样本之间基因表达的差异&#xff0c;还可以发现新的亚型并分析 SNP 变异。本教程[1]将涵盖处理和分析差异基因表达数据的基本工作流程&#xff0c;旨在提供设置环境和运行比对工具的通用方法。由于完整…

计算机网络——数据链路层

数据链路层概述 数据链路层在网络体系结构中所处的地位 主机H1给主机H2发送数据时&#xff0c;需要通过路由器R1通过广域网链路转发到路由器R2&#xff0c;R2转发到主机H2。路由器转发只用到网络层及以下各层。【以上涉及数据包按网络体系结果逐层封装解封】 为了简单起见&am…

DevC++的调试方法

目录 Dev C调试程序 Dev C调试注意事项对于修改后的程序&#xff0c;调试程序之前一定要先编译程序。 要想学会编程,第一步就是要学会调试(想我这种码龄一年的人还不会调试,丢死人). 今天,为了让你们的脸丢少点,特意写了这篇博文,给予需要帮助的人. 所谓调试程序&#xff0…

[附源码]计算机毕业设计JAVA基于JSP健身房管理系统

[附源码]计算机毕业设计JAVA基于JSP健身房管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM m…

Python实现KNN(K近邻)分类模型(KNeighborsClassifier算法)并应用网格搜索算法寻找最优参数值以及数据标准化均衡化项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 股票市场是已经发行的股票转让、买卖和流通的场所&#xff0c;包括交易所市场和场外交易市场两大类别。…

【C++】C++11部分特性

目录 一、初始化列表 二、变量类型的推导 1、auto 2、decltype 三、右值引用 1、左值与右值 2、关于左值引用、右值引用的问题 1、左值引用可以引用右值吗&#xff1f; 2、右值引用可以引用左值吗&#xff1f; 3、右值引用之后的问题 3、移动构造、移动拷贝 1、引用…

软件测试质量保证与测试

软件测试质量保证与测试 第一章 软件测试概述 1.1 软件测试背景 随着计算机技术的迅速发展和越来越广泛深入地应用于国民经济与社会生活的各个方面&#xff0c;软件系统的规模和复杂性与日俱增&#xff0c;软件的生产成本和软件中存在的缺陷与故障造成的各类损失也大大增加&…

【应用】PostgreSQL 流复制配置

PostgreSQL 流复制配置centos7 安装 postgresql时序库 timescaleDB 的安装postgresql-14 主从流复制主库配置从库配置同步流复制与异步流复制异步流复制转换为同步流复制流复制的相关参数主从流复制原理PostgreSQL WAL 日志主从流复制架构主从流复制的过程基于 docker swarm 的…

CMSC5713-IT项目管理之七、质量管理Quality Management

文章目录7.1 Quality7.2. Software Quality7.2.1. ISO/IEC 25010 Software Qualities7.2.2. Internal versus External qualities7.2.3. Software Metrics7.3. Quality Specification7.4. Project Quality Management7.4.1. Quality Planning7.4.2. Quality Assurance7.4.2.1. …

vscode 阅读 linux kernel 源码

前言 虽然身边的朋友大都在使用 source insight&#xff0c;但我却更喜欢 vscode。 不过 vscode 在代码搜索上确实不如 source insight&#xff0c;这点上我也是吃过亏的。阅读大型代码时&#xff0c;常常搜索不到关键代码&#xff0c;导致对代码的理解不充分。 当使用 vscode…

Java-反射

前言 动态语言与静态语言 动态语言 是一类在运行时可以改变其结构的语言&#xff1a;例如新的函数、对象、甚至代码可以被引进&#xff0c;已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构主要动态语言有&#xff1a;Object…

【开源电路】STM32F401RCT6开发板

【开源电路】STM32F401RCT6开发板&#x1f337;实物PCBA&#xff1a; &#x1f33c;优化后的3D效果图 &#x1f4da;STM32F401RCT6开发板简介 &#x1f4d1;主控是LQFP-64封装的STM32F401RCT6芯片&#xff0c;Micro USB接口供电&#xff0c;功能引脚全部引出&#xff0c;一个…

金融强化学习与finRL开发包

原创文章第110篇&#xff0c;专注“个人成长与财富自由、世界运作的逻辑&#xff0c; AI量化投资”。 01 一些感受 时代的一粒沙&#xff0c;落在每个人身上就是一座山。 这三年&#xff0c;对于这句话&#xff0c;相信很多人更能感同身受。 看历史风云变幻&#xff0c;轻轻…

力扣(LeetCode)21. 合并两个有序链表(C++)

迭代 同时遍历两个链表 &#xff0c; 当前结点值较小的结点插入新的链表尾部。直到有一个链表为空 &#xff0c; 我们将另一个非空链表插入新的链表尾部。 提示 : 使用哑结点&#xff0c;避免特判头结点。二路归并思想应用于链表~ class Solution { public:ListNode* mergeT…

gRPC gateway - Http Restful API gRPC 协议转换

gRPC gateway - http restful gRPC gateway 介绍 gRPC-Gateway 是protocalBufffer的编译插件,根据protobuf的服务定义自动生成反向代理服务器&#xff0c;并将Restful Http API 转化为 gRPC通信协议。反向代理服务器根据 google.api.http 注解生成。 gRPC底层是使用HTTP2 协…