当前位置:网站首页>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. .
边栏推荐
- Tips for web development: skillfully use ThreadLocal to avoid layer by layer value transmission
- golang的超时处理使用技巧
- 信息系统项目管理师---第八章 项目质量管理
- 广州首个数据安全峰会将在白云区开幕
- OceanBase社区版之OBD方式部署方式单机安装
- HMS core machine learning service creates a new "sound" state of simultaneous interpreting translation, and AI makes international exchanges smoother
- Anaconda安裝後Jupyter launch 沒反應&網頁打開運行沒執行
- It's enough to read this article to analyze the principle in depth
- Classic 100 questions of algorithm interview, the latest career planning of Android programmers
- Groovy basic syntax collation
猜你喜欢

枚举根据参数获取值

信息系统项目管理师---第八章 项目质量管理

5. Wireless in vivo nano network: top ten "feasible?" problem
Classic 100 questions of algorithm interview, the latest career planning of Android programmers
Tencent T2 Daniel explained in person and doubled his job hopping salary

OceanBase社区版之OBD方式部署方式单机安装

Introduction to enterprise lean management system

Example of applying fonts to flutter
腾讯安卓开发面试,android开发的基础知识
腾讯架构师首发,2022Android面试笔试总结
随机推荐
腾讯T3手把手教你,真的太香了
Anaconda安裝後Jupyter launch 沒反應&網頁打開運行沒執行
Cesium Click to draw a circle (dynamically draw a circle)
夏志刚介绍
Monthly report of speech synthesis (TTS) and speech recognition (ASR) papers in June 2022
Method keywords deprecated, externalprocname, final, forcegenerate
Vscode debug run fluent message: there is no extension for debugging yaml. Should we find yaml extensions in the market?
js获取浏览器系统语言
范式的数据库具体解释
[network planning] Chapter 3 data link layer (4) LAN, Ethernet, WLAN, VLAN
Example of applying fonts to flutter
js实现力扣71题简化路径
Initial experience of addresssanitizer Technology
Alibaba数据源Druid可视化监控配置
Poj1149 pigs [maximum flow]
Cesium 两点之间的直线距离
Redisson bug analysis
Qinglong panel white screen one key repair
转让malloc()该功能后,发生了什么事内核?附malloc()和free()实现源
Finally, there is no need to change a line of code! Shardingsphere native driver comes out