Leetcode: Simplify Path

来源:互联网 发布:程序员出差一年 编辑:程序博客网 时间:2024/06/03 21:55

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 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".
Use stack to store each path name between "/". If ".." appears, pop the stack, if "." appears, do nothing, else push that path name into the stack. When this is done, send the names to a string, and add "/" between them.


public class Solution {    public String simplifyPath(String path) {        if (path == null || path.length() == 0) {            return path;        }                Stack<String> stack = new Stack<String>();        int i = 0;        while (i < path.length()) {            StringBuilder sb = new StringBuilder();            while (i < path.length() && path.charAt(i) != '/') {                sb.append(path.charAt(i));                i++;            }                        String temp = sb.toString();            if (!temp.isEmpty()) {                if (temp.equals("..")) {                    if (!stack.isEmpty()) {                        stack.pop();                    }                } else if (!temp.equals(".")) {                    stack.push(temp);                }            }            i++;        }                StringBuilder res = new StringBuilder();        while (!stack.isEmpty()) {            res.insert(0, "/" + stack.pop());        }                if (res.length() == 0) {        return "/";        }        return res.toString();    }}



0 0
原创粉丝点击