当前位置:网站首页>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 .

  1. 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 .
  2. 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. .

原网站

版权声明
本文为[Will you give me good night]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207061141303275.html