华为机试 - 找出经过特定点的路径长度
创始人
2024-02-04 00:48:33

目录

题目描述

输入描述

输出描述

用例

题目解析

算法源码


题目描述

输入描述

输入一个字符串,都是以大写字母组成,每个相邻的距离是 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;}
});

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...