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"
.
题解:
- 用split函数将path按照一个或者多个(正则表达式实现)'/'分成不同的字符串存放在数组positions中。
- 遍历positions,如果遇到非"..",".",""的字符串,就放入answers列表中;如果遇到".."且answers不为空,就把answers尾部的字符串扔掉。
- 最后把answers中的字符串用"/"连接起来,注意在连接后的字符串结尾会多一个"/',可以substring一下result去掉。
代码如下:
1 public class Solution { 2 public String simplifyPath(String path) { 3 ArrayList<String> answers = new ArrayList<String>(); 4 String[] positions = path.split("/+"); 5 for(int i = 0;i < positions.length;i++){ 6 if(positions[i].equals("..")){ 7 if(answers.size() > 0) 8 answers.remove(answers.size()-1); 9 } 10 else if(!positions[i].equals(".") && !positions[i].equals("")) 11 { 12 answers.add(positions[i]); 13 } 14 } 15 16 String result = new String("/"); 17 for(String s:answers) 18 result += s + "/"; 19 20 if(result.length() > 1) 21 result = result.substring(0,result.length()-1); 22 23 return result; 24 } 25 }