Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
- 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"
.
<span style="font-size:18px;">public class Solution {
public String simplifyPath(String path) {
char[] chs = path.toCharArray();
char[] charSta = new char[10000];
int top = 0;
ArrayList<String> wordSta = new ArrayList<>();
for(int i = 0; i < chs.length; ++i){
if(chs[i] == '/'){
if(top != 0){
String string = new String(charSta, 0, top);
top = 0;
if(string.equals("..")){
if(wordSta.size() != 0) wordSta.remove(wordSta.size() - 1);
}
else if(!string.equals(".")){
wordSta.add(string);
}
}
}
else{
charSta[top++] = chs[i];
}
}
if(top != 0){
String string = new String(charSta, 0, top);
if(string.equals("..") && wordSta.size() != 0) wordSta.remove(wordSta.size() - 1);
else if(!string.equals(".") && !string.equals("..")) wordSta.add(string);
}
StringBuilder sb = new StringBuilder(1000);
for(String string : wordSta){
sb.append("/").append(string);
}
if(sb.length() == 0)
sb.append("/");
return sb.toString();
}
}</span>