• 71. Simplify Path


    • [ ] 71. Simplify Path

      Given an absolute path for a file (Unix-style), simplify it. Or in other words, convert it to the canonical path.

      In a UNIX-style file system, a period . refers to the current directory. Furthermore, a double period .. moves the directory up a level.

      Note that the returned canonical path must always begin with a slash /, and there must be only a single slash / between two directory names. The last directory name (if it exists) must not end with a trailing /. Also, the canonical path must be the shortest string representing the absolute path.

      Example 1:

      Input: "/home/"
      Output: "/home"
      Explanation: Note that there is no trailing slash after the last directory name.
      

      Example 2:

      Input: "/../"
      Output: "/"
      Explanation: Going one level up from the root directory is a no-op, as the root level is the highest level you can go.
      

      Example 3:

      Input: "/home//foo/"
      Output: "/home/foo"
      Explanation: In the canonical path, multiple consecutive slashes are replaced by a single one.
      

      Example 4:

      Input: "/a/./b/../../c/"
      Output: "/c"
      

      Example 5:

      Input: "/a/../../b/../c//.//"
      Output: "/c"
      

      Example 6:

      Input: "/a//b////c/d//././/.."
      Output: "/a/b/c"
      

    题解

    直接用栈解的,效果还不错

    class Solution {
        public String simplifyPath(String path) {
            StringBuilder sb = new StringBuilder();
    
            String[] split = path.split("/");
    
            Stack stack = new Stack();
            for (int i = 0 ; i < split.length; i++) {
                if (split[i].isEmpty() || split[i].equals(".")) {
                    continue;
                }
    
                if (split[i].equals("..")) {
                    if (stack.isEmpty()) continue;
                    stack.pop();
                } else {
                    stack.push(split[i]);
                }
    
            }
    
            if (stack.isEmpty()) return "/";
    
            Object[] objects = stack.toArray();
            for (int i = 0; i < objects.length; i++) {
                sb.append("/");
                sb.append(objects[i]);
            }
    
            return sb.toString();
        }
    }
    
  • 相关阅读:
    Thinkphp 模板中使用自定义函数的方法
    thinkphp 邮件发送
    str_replace使用
    SQL备份一张表的数据
    error: Allowed memory size
    LitJson使用
    implode,explode的使用
    ModelState.AddModelError使用
    HTTP 错误 404.2
    验证码显示不出来,在THINKPHP中的使用
  • 原文地址:https://www.cnblogs.com/zhangqian27/p/12837016.html
Copyright © 2020-2023  润新知