当前位置:网站首页>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
- Qinglong panel white screen one key repair
- Database specific interpretation of paradigm
- Introduction to enterprise lean management system
- 腾讯T3手把手教你,真的太香了
- 【GET-4】
- 青龙面板白屏一键修复
- Classic 100 questions of algorithm interview, the latest career planning of Android programmers
- [network planning] Chapter 3 data link layer (4) LAN, Ethernet, WLAN, VLAN
- BUUCTF---Reverse---easyre
猜你喜欢
Node.js: express + MySQL实现注册登录,身份认证
A5000 vGPU显示模式切换
[network planning] Chapter 3 data link layer (4) LAN, Ethernet, WLAN, VLAN
[calculating emotion and thought] floor sweeper, typist, information panic and Oppenheimer
2022年6月语音合成(TTS)和语音识别(ASR)论文月报
腾讯安卓开发面试,android开发的基础知识
Tencent architects first, 2022 Android interview written examination summary
腾讯T3大牛手把手教你,大厂内部资料
Cesium 点击绘制圆形(动态绘制圆形)
深入浅出,面试突击版
随机推荐
Period compression filter
B-杰哥的树(状压树形dp)
02 基础入门-数据包拓展
Tencent Android development interview, basic knowledge of Android Development
Example of shutter text component
Guangzhou's first data security summit will open in Baiyun District
Transformer model (pytorch code explanation)
Poj3617 best cow line
Configuration and simple usage of the EXE backdoor generation tool quasar
Qinglong panel white screen one key repair
An East SMS login resurrection installation and deployment tutorial
深入浅出,面试突击版
Test Li hi
青龙面板白屏一键修复
SSH connection denied
Tencent byte Alibaba Xiaomi jd.com offer got a soft hand, and the teacher said it was great
Initial experience of addresssanitizer Technology
leetcode先刷_Maximum Subarray
A5000 vgpu display mode switching
腾讯T2大牛亲自讲解,跳槽薪资翻倍