首页 > 代码库 > [leetcode] Simplify Path

[leetcode] 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".

https://oj.leetcode.com/problems/simplify-path/

 

思路:先按‘/‘分割路径,存入一个stack中,注意遇到‘.‘和空字符要忽略,遇到‘..‘要pop,正常路径push,最后依次pop组合成结果。

import java.util.Stack;public class Solution {    public String simplifyPath(String path) {        if (path == null || path.length() == 0)            return path;        Stack<String> stack = new Stack<String>();        String[] oldPaths = path.split("/");        for (String each : oldPaths) {            if (each.equals(""))                continue;            if (each.equals("."))                continue;            if (each.equals("..")) {                if (!stack.isEmpty())                    stack.pop();            } else {                stack.push(each);            }        }        if (stack.isEmpty())            return "/";        StringBuilder sb = new StringBuilder();        while (!stack.isEmpty()) {            sb.append(new StringBuffer(stack.pop()).reverse().toString());            sb.append("/");        }        return sb.reverse().toString();    }    public static void main(String[] args) {        System.out.println(new Solution().simplifyPath("/a/./b/../../c/"));        System.out.println(new Solution().simplifyPath("//a//b//c//"));        System.out.println(new Solution().simplifyPath("/home/.//aa/.././"));        System.out.println(new Solution().simplifyPath("/../..//.././/."));    }}
View Code