【LeetCode】71. Simplify Path

来源:互联网 发布:刺客信条周边淘宝 编辑:程序博客网 时间:2024/06/06 06:39

问题描述

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;        }