当前位置:网站首页>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. .
边栏推荐
- 腾讯安卓开发面试,android开发的基础知识
- Color is converted to tristimulus value (r/g/b) (dry stock)
- After solving 2961 user feedback, I made such a change
- An East SMS login resurrection installation and deployment tutorial
- 腾讯T3手把手教你,真的太香了
- How to handle the timeout of golang
- Node.js: express + MySQL实现注册登录,身份认证
- 信息系统项目管理师---第八章 项目质量管理
- POJ 3207 Ikki' s Story IV – Panda' s Trick (2-SAT)
- Example of shutter text component
猜你喜欢
Notes on beagleboneblack
BUUCTF---Reverse---easyre
Tencent architects first, 2022 Android interview written examination summary
PowerPivot——DAX(初识)
After solving 2961 user feedback, I made such a change
[Yann Lecun likes the red stone neural network made by minecraft]
腾讯架构师首发,2022Android面试笔试总结
【GET-4】
枚举根据参数获取值
2022年6月语音合成(TTS)和语音识别(ASR)论文月报
随机推荐
Problems encountered in using RT thread component fish
HDU 1026 Ignatius and the Princess I 迷宫范围内的搜索剪枝问题
【GET-4】
redisson bug分析
青龙面板白屏一键修复
【云小课】EI第47课 MRS离线数据分析-通过Flink作业处理OBS数据
Cesium Click to draw a circle (dynamically draw a circle)
数字三角形模型 AcWing 1018. 最低通行费
Cesium 两点之间的直线距离
Tencent Android development interview, basic knowledge of Android Development
5. 無線體內納米網:十大“可行嗎?”問題
In simple terms, interview surprise Edition
HMS Core 机器学习服务打造同传翻译新“声”态,AI让国际交流更顺畅
2022年6月语音合成(TTS)和语音识别(ASR)论文月报
腾讯字节等大厂面试真题汇总,网易架构师深入讲解Android开发
The "white paper on the panorama of the digital economy" has been released with great emphasis on the digitalization of insurance
Speech recognition (ASR) paper selection: talcs: an open source Mandarin English code switching corps and a speech
颜色(color)转换为三刺激值(r/g/b)(干股)
【GET-4】
8086指令码汇总表(表格)