当前位置:网站首页>js实现力扣71题简化路径
js实现力扣71题简化路径
2022-07-06 11:42:00 【会给我晚安吗】
很久不见时隔大概...忘记了哈哈哈哈,最近在搞MongoDB,感觉很适合前端哈哈哈,话不多说,今天给大家带来的是,一道算法题题解,可能太简单了,对于内些大佬来说,咳咳,大佬,就看乐子就好啦,不废话了,给大家讲的是力扣的第71题,简化路径这道题呢是一个中等题,挑战一下吧,下面我们来看题。
给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。
请注意,返回的 规范路径 必须遵循下述格式:
始终以斜杠 '/' 开头。
两个目录名之间必须只有一个斜杠 '/' 。
最后一个目录名(如果存在)不能 以 '/' 结尾。
此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '..')。
返回简化后得到的 规范路径 。
示例 1:
输入:path = "/home/"
输出:"/home"
大家看到题,小白可能已经懵了,这是啥一大段文字,大家先不要急,我们开始讲解思路。
- 我们先思考题中有共同的字符是啥,是不是‘/’对吧我们既然找到了‘/’,那我们首先想到的函数就是split对吧,这个可以把字符串的'/'去掉变成数组,既然变成了数组,我们是不是就又应该想到一个叫做栈的数据结构对吧,虽然js中没有栈这个数据结构,但是我们可以通过算法模拟一个。
- 下面我们分析需求:第一:'.' 代表的是当前目录本身: 换句话说就是 /a/./b === /a/b 它是可以去掉的;第二:'..'代表的是当前目录的前一个目录: 换句话说就是 /a/b/../c === /a/c 它也是可以去掉的,而且还要把他前面的目录去掉;
分析完了这道题下面我们来用代码去实现一下:
/**
* @param {string} path
* @return {string}
*/
上面那些不重要是一些注释:解释一下
/**
* 第一个代表有一个参数是path类型是字符型
* 第二个代表返回的参数也是字符型
*/
上面解释给一些新手看起来友好一些下面我们开始讲代码
const simplifyPath = function (path) {
let stack = []; 定义一个空数组
let str = ''; 定义一个字符串
上面这俩为啥这么定义我先不讲避免太混乱
let arr = path.split('/'); 把传进来的字符串按'/'分割我们上面讲到的,这里变成了一个数组大概是这个样子['','a','','.','b','','..','','..','','..','','c',''];
下面我们开始便利这个数组,这里我用到的forEach性能可能会差点for循环会更好一点。
arr.forEach(item => {
这里这个判断就是如果数组里面的一项等于'..'我们就pop出去,如果不等于'.'在push进我们定义的数组stack,可能大家会这样问为啥要不等于'.'呢,这里给大家解释一下,因为'.'代表当前的目录,所以要排除这个'.'
if (item && item === '..') {
stack.pop();
} else if (item && item !== '.') {
stack.push(item);
}
})
这里判断一下arr的长度如果长度为空的话就直接返回'/',不为空再返回我们循环的数组;
arr.length ? str = '/' + stack.join('/') : str = '/'
return str;
};
console.log(simplifyPath("/a/./b/../../c/"))通过上面代码就实现了力扣的71题,哈哈哈,是不是很简单,祝大家在自己的算法的道路上越来越来,进入到自己想进的公司,谢谢大家。
边栏推荐
- C language daily practice - day 22: Zero foundation learning dynamic planning
- 【基础架构】Flink/Flink-CDC的部署和配置(MySQL / ES)
- 信息系统项目管理师---第八章 项目质量管理
- Systematic and detailed explanation of redis operation hash type data (with source code analysis and test results)
- [infrastructure] deployment and configuration of Flink / Flink CDC (MySQL / es)
- 时钟轮在 RPC 中的应用
- usb host 驱动 - UVC 掉包
- How to do smoke test
- In depth analysis, Android interview real problem analysis is popular all over the network
- JDBC details
猜你喜欢

理解 YOLOV1 第二篇 预测阶段 非极大值抑制(NMS)

思维导图+源代码+笔记+项目,字节跳动+京东+360+网易面试题整理

VMware virtual machine cannot open the kernel device "\.\global\vmx86"

【翻译】云原生观察能力微调查。普罗米修斯引领潮流,但要了解系统的健康状况仍有障碍...

Phoenix Architecture 3 - transaction processing
![[play with Linux] [docker] MySQL installation and configuration](/img/04/6253ef9fdf7d2242b42b4c7fb2c607.png)
[play with Linux] [docker] MySQL installation and configuration

How to do smoke test

Live broadcast today | the 2022 Hongji ecological partnership conference of "Renji collaboration has come" is ready to go

Analysis of rainwater connection

【翻译】Linkerd在欧洲和北美的采用率超过了Istio,2021年增长118%。
随机推荐
From spark csc. csr_ Matrix generate adjacency matrix
全套教学资料,阿里快手拼多多等7家大厂Android面试真题
How to do smoke test
Phoenix Architecture 3 - transaction processing
Dark horse -- redis
MySQL information schema learning (II) -- InnoDB table
【pytorch】yolov5 训练自己的数据集
社招面试心得,2022最新Android高频精选面试题分享
Lick the dog until the last one has nothing (simple DP)
LeetCode-1279. Traffic light intersection
Fast power template for inverse element, the role of inverse element and example [the 20th summer competition of Shanghai University Programming League] permutation counting
Leetcode 30. Concatenate substrings of all words
[translation] Digital insider. Selection process of kubecon + cloudnativecon in Europe in 2022
中缀表达式转后缀表达式详细思路及代码实现
今日直播 | “人玑协同 未来已来”2022弘玑生态伙伴大会蓄势待发
Translation D28 (with AC code POJ 26:the nearest number)
冒烟测试怎么做
C language daily practice - day 22: Zero foundation learning dynamic planning
Computer network: sorting out common network interview questions (I)
Problems encountered in using RT thread component fish