Given an absolute path for a file (Unix-style), simplify it.
For example,
path ="/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
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"
.
这道题就是化简地址,有两个规则: /./ 代表不变
/../ 代表返回上级目录
还有就是Corner Cases中的特殊情况都有说明
这道题刚开始写了好半天,其实主要原因是,题目中有一个没有说明,那就是带有转义字符的情况:如果目录名字中含有‘/’,如果考虑这种情况会复杂许多。但是这道题其实没有考虑这种情况,也就是说将\这个符号当成一般的字符处理。所以也就没什么难点,就是考虑清楚情况。
可以使用自动机求解。
public class Solution { public String simplifyPath(String path) { int len = path.length(); if (len == 0) return path; Stackstack = new Stack (); int i = 0; while (i < len) { if (path.charAt(i) == '/') { while( i = 0; j--) { result[j] = stack.pop(); } return String.valueOf(result); }}