Given an absolute path for a file (Unix-style), simplify it.
For example,
Path="/home/"
, =>"/home"
Path="/a/./b/../../c/"
, =>"/c"
Click to show corner cases.
Corner cases:
- Did you consider the case wherePath=
"/../"
?
In this case, you shoshould return"/"
.
- Another corner case is the path might contain multiple slashes
‘/‘
Together, such"/home//foo/"
.
In this case, you shoshould ignore redundant slashes and return"/home/foo"
.
Solution: Evaluate the Java string split function.
- Use/to split string
- Then let's take a look at each short section. If it is "." or "" (indicating two/connected), it will not go into the stack; if it is "...", pop; if it is normal, push.
1 public class Solution { 2 public String simplifyPath(String path) { 3 if(path==null||path.length()==0) 4 return ""; 5 if(path.equals("/")) 6 return "/"; 7 String[] tokens=path.split("/"); 8 Stack<String> stack=new Stack<String>(); 9 10 for(int i=0;i<tokens.length;++i){11 if(tokens[i].equals("..")){12 if(!stack.empty())13 stack.pop();14 else15 continue;16 }else if(tokens[i].equals(".")||tokens[i].length()==0){17 continue;18 }else{19 stack.push(tokens[i]);20 }21 }22 23 Stack<String> stack2=new Stack<String>();24 String result=new String("");25 26 if(stack.empty())27 return "/";28 29 while(!stack.empty())30 stack2.push(stack.pop());31 while(!stack2.empty()){32 result+="/";33 result+=stack2.pop();34 }35 return result; 36 }37 }
[Leetcode] simplify path