zoukankan      html  css  js  c++  java
  • 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();
        }
    }
    
  • 相关阅读:
    谈谈架构层级的“开闭原则”
    将MySQL数据库中的表结构导入excel 或word
    淘宝网-软件质量属性分析
    架构漫谈阅读有感
    机器学习-分类算法之决策树、随机森林
    机器学习-分类算法之逻辑回归
    机器学习-朴素贝叶斯算法
    机器学习-分类算法之k-近邻
    机器学习-模型选择
    机器学习-scikit-learn数据集
  • 原文地址:https://www.cnblogs.com/zhangqian27/p/12837016.html
Copyright © 2011-2022 走看看