问题描述

https://leetcode.com/problems/simplify-path/#/description

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".

算法

使用spli('/')切割字符串,如/a/./b/../../c/切割为:['a','.','b','..','.','c',''],然后就好办了。使用一个栈来存储路径,然后遇到['.','']就跳过去,遇到'..'就将栈的最近元素弹出。

代码

public String simplifyPath(String path) {
	    	Stack<String> stack = new Stack<>();
	    	for(String dir:path.split("/")) {
	    		if("..".equals(dir)) {
	    			if(!stack.isEmpty())
	    				stack.pop();
	    		} else if(".".equals(dir)) {
	    			continue;
	    		} else {
	    			if(!"".equals(dir)) {
	    				stack.push(dir);
	    			}
	    		}
	    	}
	    	String r = "";
	    	for(String dir:stack) {
	    		r = r + "/" + dir;
	    	}
	    	return "".equals(r)?"/":r;
	    }