Description
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"
path = "/a/../../b/../c//.//", => "/c"
path = "/a//b////c/d//././/..", => "/a/b/c"
In a UNIX-style file system, a period (‘.’) refers to the current directory, so it can be ignored in a simplified path. Additionally, a double period (“..”) moves up a directory, so it cancels out whatever the last directory was. For more information, look here: https://en.wikipedia.org/wiki/Path_(computing)#Unix_style
Corner Cases:
- Did you consider the case where path =
"/../"?
In this case, you should return"/". - Another corner case is the path might contain multiple slashes
'/'together, such as"/home//foo/".
In this case, you should ignore redundant slashes and return"/home/foo".
解法
根据题意,可总结规律有:按’/‘号分隔路径,中间是”.”的情况直接略过,是”..”时删掉它上面挨着的一个路径,而下面的边界条件给的一些情况中可以得知,如果是空的话返回”/“,如果有多个”/“只保留一个。这道题坑在路径中可以出现’.’,意思是如果两个斜杠之间出现了大于2个点或者点与其他字符混合的情况,应该按照路径处理。
具体代码如下:
1 | class Solution { |