问题:
来源:https://leetcode.com/problems/simplify-path
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".
思路:
先将路径按照“/”切分,然后遍历切分后的路径,利用栈的思想,遇到“”或者“.”就忽略,遇到“..”就出栈(除非栈中没有元素),遇到其他字符串就入栈,最后将栈中的字符串用“/”拼接起来
1 import java.util.Stack; 2 class Solution { 3 public String simplifyPath(String path) { 4 String[] subpaths = path.split("/"); 5 Stack<String> stack = new Stack<String>(); 6 for(String subpath: subpaths) { 7 if(subpath.equals(".") || subpath.equals("")) { 8 continue; 9 } else if(subpath.equals("..")) { 10 if(!stack.isEmpty()) { 11 stack.pop(); 12 } 13 } else { 14 stack.push(subpath); 15 } 16 } 17 StringBuilder stringBuilder = new StringBuilder(); 18 for(String subpath: stack) { 19 stringBuilder.append("/" + subpath); 20 } 21 if(stringBuilder.length() == 0) { 22 stringBuilder.append("/"); 23 } 24 return stringBuilder.toString(); 25 } 26 }