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”.
思路:先把String
用/
分割成不同的子串,然后对子串内容判断。
代码:
public class Solution {
public String simplifyPath(String path) {
Deque<String> pathStack =new LinkedList<String>();
String[] strs = path.split("/");
for(int i=0; i<strs.length;++i)
{
if(strs[i].equals(".") || strs[i].length()==0)
{
continue;
}
else if(strs[i].equals(".."))
{
if(!pathStack.isEmpty())
{
pathStack.removeFirst();
}
}
else{
pathStack.addFirst(strs[i]);
}
}
StringBuilder result= new StringBuilder();
Iterator<String> iter = pathStack.iterator();
while(iter.hasNext())
{
String c= iter.next();
result.insert(0, c);
result.insert(0,"/");
}
if(result.length()==0) result.insert(0,"/");
return result.toString();
}
}