当前位置: 面试刷题>> 简化路径 (经典算法题500道)


### 题目描述 给定一个字符串表示的文件系统路径,要求你将其简化为最简洁的形式。路径中的字符串可能包含`.`表示当前目录,`..`表示上级目录,以及普通文件名或目录名。路径字符串的开头和结尾均不包含斜杠`/`,但路径中的目录名之间会以单个斜杠`/`分隔。你需要返回路径简化后的结果。 **示例 1**: ``` 输入: "/home/" 输出: "/home" 解释: 注意,最后一个目录名后面没有斜杠。 ``` **示例 2**: ``` 输入: "/../" 输出: "/" 解释: 从根目录向上级目录回退一级,到达根目录。 ``` **示例 3**: ``` 输入: "/home//foo/" 输出: "/home/foo" 解释: 在路径中,多余的斜杠应该被去除。 ``` **示例 4**: ``` 输入: "/a/./b/../../c/" 输出: "/c" ``` ### PHP 示例代码 ```php function simplifyPath($path) { $stack = []; $parts = explode('/', $path); foreach ($parts as $part) { if ($part === '.' || $part === '') { // 当前目录或空字符串,跳过 continue; } elseif ($part === '..') { // 返回到上一级目录 array_pop($stack); } else { // 其他情况,压入栈中 array_push($stack, $part); } } // 将栈中的目录名用斜杠连接起来 return '/' . implode('/', $stack); } // 测试 echo simplifyPath("/a/./b/../../c/"); // 输出: /c ``` ### Python 示例代码 ```python def simplifyPath(path): stack = [] parts = path.split('/') for part in parts: if part == '.' or part == '': # 当前目录或空字符串,跳过 continue elif part == '..': # 返回到上一级目录 if stack: stack.pop() else: # 其他情况,压入栈中 stack.append(part) # 将栈中的目录名用斜杠连接起来 return '/' + '/'.join(stack) # 测试 print(simplifyPath("/a/./b/../../c/")) # 输出: /c ``` ### JavaScript 示例代码 ```javascript function simplifyPath(path) { const stack = []; const parts = path.split('/'); for (let part of parts) { if (part === '.' || part === '') { // 当前目录或空字符串,跳过 continue; } else if (part === '..') { // 返回到上一级目录 if (stack.length > 0) { stack.pop(); } } else { // 其他情况,压入栈中 stack.push(part); } } // 将栈中的目录名用斜杠连接起来 return '/' + stack.join('/'); } // 测试 console.log(simplifyPath("/a/./b/../../c/")); // 输出: /c ``` **码小课网站中有更多相关内容分享给大家学习**,希望这些示例和描述能帮助到你。
推荐面试题