当前位置:网站首页>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题,哈哈哈,是不是很简单,祝大家在自己的算法的道路上越来越来,进入到自己想进的公司,谢谢大家。
边栏推荐
- 冒烟测试怎么做
- 潇洒郎: AttributeError: partially initialized module ‘cv2‘ has no attribute ‘gapi_wip_gst_GStreamerPipe
- 如何自定义动漫头像?这6个免费精品在线卡通头像生成器,看一眼就怦然心动!
- DOM operation
- 凤凰架构3——事务处理
- A method of removing text blur based on pixel repair
- 面试突击63:MySQL 中如何去重?
- 学习探索-使用伪元素清除浮动元素造成的高度坍塌
- 全套教学资料,阿里快手拼多多等7家大厂Android面试真题
- Interview assault 63: how to remove duplication in MySQL?
猜你喜欢
【翻译】云原生观察能力微调查。普罗米修斯引领潮流,但要了解系统的健康状况仍有障碍...
零基础入门PolarDB-X:搭建高可用系统并联动数据大屏
企业精益管理体系介绍
An error occurs when installing MySQL: could not create or access the registry key needed for the
Application of clock wheel in RPC
Cereals Mall - Distributed Advanced p129~p339 (end)
Blue Bridge Cup microbial proliferation C language
Detailed idea and code implementation of infix expression to suffix expression
MySQL information schema learning (II) -- InnoDB table
[play with Linux] [docker] MySQL installation and configuration
随机推荐
深入分析,Android面试真题解析火爆全网
[translation] linkerd's adoption rate in Europe and North America exceeded istio, with an increase of 118% in 2021.
C # use Marshall to manually create unmanaged memory in the heap and use
Application of clock wheel in RPC
关于图像的读取及处理等
Hudi vs Delta vs Iceberg
How to access localhost:8000 by mobile phone
After solving 2961 user feedback, I made such a change
腾讯Android面试必问,10年Android开发经验
[pytorch] yolov5 train your own data set
从sparse.csc.csr_matrix生成邻接矩阵
short i =1; I=i+1 and short i=1; Difference of i+=1
spark基础-scala
Swiftui game source code Encyclopedia of Snake game based on geometryreader and preference
Systematic and detailed explanation of redis operation hash type data (with source code analysis and test results)
Phoenix Architecture 3 - transaction processing
usb host 驱动 - UVC 掉包
JDBC详解
Translation D28 (with AC code POJ 26:the nearest number)
史上超级详细,想找工作的你还不看这份资料就晚了