当前位置:网站首页>JS implementation force deduction 71 question simplified path
JS implementation force deduction 71 question simplified path
2022-07-06 20:09:00 【Will you give me good night】
Long time no see, after about ... Forget hahaha , Doing in recently MongoDB, It feels very suitable for the front end hahaha , Don't talk much , What I bring to you today is , An algorithm problem solution , Maybe it's too simple , For some big men inside , Cough , bosses , Just have fun , Don't talk nonsense , What I'm going to tell you is the number one of Li Kou 71 topic , The problem of simplified path is a medium problem , Take a challenge , Now let's look at the question .
Give you a string path , Indicates a point to a file or directory Unix style Absolute path ( With '/' start ), Please translate it into a more concise specification path .
stay Unix Style file system , One point (.) Represents the current directory itself ; Besides , Two points (..) Means to switch the directory to the next level ( Point to the parent directory ); Both can be part of a complex relative path . Any number of consecutive slashes ( namely ,'//') Are treated as a single slash '/' . For this problem , Points in any other format ( for example ,'...') Are considered documents / Directory name .
Please note that , Back to Canonical path The following format must be followed :
Always with slash '/' start .
There must be only one slash between two directory names '/' .
Last directory name ( If there is ) You can't With '/' ending .
Besides , The path contains only directories on the path from the root directory to the target file or directory ( namely , Not included '.' or '..').
Return the simplified Canonical path .
Example 1:
Input :path = "/home/"
Output :"/home"
You see the question , Xiaobai may have been confused , What is this big paragraph , Let's not rush , We begin to explain our ideas .
- Let's first think about the common characters in the question , Is it right? ‘/’ Right, now that we have found it ‘/’, The first function we think of is split Right , This can put the string '/' Remove and become an array , Now that it has become an array , Should we think of a data structure called stack again , although js There is no stack data structure in , But we can simulate a .
- Now let's analyze the requirements : First of all :'.' Represents the current directory itself : In other words /a/./b === /a/b It can be removed ; second :'..' Represents the previous directory of the current directory : In other words /a/b/../c === /a/c It can also be removed , And also remove the directory in front of him ;
After analyzing this problem, let's implement it with code :
/**
* @param {string} path
* @return {string}
*/
The unimportant ones above are some notes : Explain it.
/**
* The first representation has a parameter path The type is character
* The second represents that the returned parameter is also of character type
*/
The above explanation looks friendly to some novices. Let's start with the code
const simplifyPath = function (path) {
let stack = []; Define an empty array
let str = ''; Define a string
Why are the above two so defined? I won't talk about it first to avoid too much confusion
let arr = path.split('/'); Press '/' Split what we mentioned above , This becomes an array, which looks like this ['','a','','.','b','','..','','..','','..','','c',''];
Now let's start to facilitate this array , Here I use forEach The performance may be poor for The cycle will be better .
arr.forEach(item => {
The judgment here is that if a term in the array is equal to '..' We will pop get out , If not equal to '.' stay push Enter the array we defined stack, You may ask why it doesn't mean '.' Well , Here's an explanation , because '.' Represents the current directory , So rule this out '.'
if (item && item === '..') {
stack.pop();
} else if (item && item !== '.') {
stack.push(item);
}
})
Here's to judge arr If the length is empty, it will return directly '/', If it is not empty, return the array of our loop ;
arr.length ? str = '/' + stack.join('/') : str = '/'
return str;
};
console.log(simplifyPath("/a/./b/../../c/"))
Through the above code, we can achieve the force buckle 71 topic , Ha ha ha , Is it simple , I wish you all more and more on the road of your algorithm , Enter the company you want to enter , Thank you. .
边栏推荐
- Groovy basic syntax collation
- 棋盘左上角到右下角方案数(2)
- Pay attention to the partners on the recruitment website of fishing! The monitoring system may have set you as "high risk of leaving"
- Wonderful coding [hexadecimal conversion]
- HDU 1026 Ignatius and the Princess I 迷宫范围内的搜索剪枝问题
- 【云小课】EI第47课 MRS离线数据分析-通过Flink作业处理OBS数据
- A5000 vGPU显示模式切换
- 微信小程序常用集合
- Node.js: express + MySQL实现注册登录,身份认证
- Cesium 两点之间的直线距离
猜你喜欢
腾讯安卓开发面试,android开发的基础知识
【计网】第三章 数据链路层(4)局域网、以太网、无线局域网、VLAN
Jupyter launch didn't respond after Anaconda was installed & the web page was opened and ran without execution
Selenium advanced operations
5. Wireless in vivo nano network: top ten "feasible?" problem
语音识别(ASR)论文优选:全球最大的中英混合开源数据TALCS: An Open-Source Mandarin-English Code-Switching Corpus and a Speech
5. 無線體內納米網:十大“可行嗎?”問題
22-07-05 七牛云存储图片、用户头像上传
Standardized QCI characteristics
rt-thread i2c 使用教程
随机推荐
Notes on beagleboneblack
AsyncHandler
[cloud lesson] EI lesson 47 Mrs offline data analysis - processing OBS data through Flink
PHP and excel phpexcel
Cesium Click to draw a circle (dynamically draw a circle)
【计网】第三章 数据链路层(3)信道划分介质访问控制
BeagleBoneBlack 上手记
Recursive implementation of department tree
爬虫(14) - Scrapy-Redis分布式爬虫(1) | 详解
An East SMS login resurrection installation and deployment tutorial
学习打卡web
SSH connection denied
Tencent cloud database public cloud market ranks top 2!
Vscode debug run fluent message: there is no extension for debugging yaml. Should we find yaml extensions in the market?
5. 无线体内纳米网:十大“可行吗?”问题
青龙面板白屏一键修复
Anaconda安装后Jupyter launch 没反应&网页打开运行没执行
mod_wsgi + pymssql通路SQL Server座
Wonderful coding [hexadecimal conversion]
Groovy basic syntax collation