Simplify Path

题目地址:
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".

解题思路:
这里我们需要deque来将路径的文件名储存。因为用 string的split方法的时候,当第一个是/, split的结果的第一个是空"",所以set里面需要有"". link: https://discuss.leetcode.com/topic/7675/java-10-lines-solution-with-stack

代码:

public String simplifyPath(String path) {
    Deque<String> stack = new LinkedList<>();
    Set<String> skip = new HashSet<>(Arrays.asList("..",".",""));
    for (String dir : path.split("/")) {
        if (dir.equals("..") && !stack.isEmpty()) stack.pop();
        else if (!skip.contains(dir)) stack.push(dir);
    }
    String res = "";
    for (String dir : stack) res = "/" + dir + res;
    return res.isEmpty() ? "/" : res;
}




Comments

Popular Posts