LeetCode —— 71.简化路径(Python3)

tech2022-09-08  103

以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。

在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径

请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/simplify-path 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 —————————————————————— 个人理解题意:从前往后看文件的绝对路径,两个点(…)的作用是将目录切换到上一级,一个点(.)的作用是表示当前目录本身,因此可以在操作时将其忽略。

对于给定绝对文件路径,使用’/‘对其进行切分,因为绝对路径中可能存在’//‘这样的组合,使用’/‘切分后会产生’'这样的输出,同时因为/./的作用是表示当前目录本身,所以没有意义,在切分时也可以将其忽略;

对于两个点(…),如果其存在于根目录中,没有办法将目录切换到上一级,因此可以跳过;但是如果在遇到(…)的时候不是根目录,则需要将其当前目录进行删除。

其Python3代码如下:

class Solution: def simplifyPath(self, path: str) -> str: pl = [p for p in path.split('/') if p not in ['','.']] # 忽略'//'和'/./'的情况,这两种切分后为''和'.' while '..' in pl: # 找到列表中第一个'..'的位置 idx = pl.index('..') if idx != 0: # 表示当前目录不是根目录 pl = pl[:idx-1] + pl[idx+1:] # 将前目录进行删除 else: # 当前目录为根目录 pl.remove('..') # 直接删除'..',因为没有意义,根目录没办法返回更上一级的目录 return '/' + '/'.join(pl) # 拼接并返回规范化的绝对路径

时间复杂度为O(n),空间复杂度为O(n);

最新回复(0)