美文网首页
栈-N71-简化路径

栈-N71-简化路径

作者: 三次元蚂蚁 | 来源:发表于2019-04-12 11:50 被阅读0次

题目

  • 概述:给定一个绝对路径,简化它,简化规则如下:

    1. 消去'.'('.'表示当前目录本身
    2. 消去'..'('..'表示上一级)
    3. 消去重复的'/'
    4. 路径开头必须为'/'
    5. 消去路径结尾的'/'
  • 出处:https://leetcode-cn.com/problems/simplify-path/

思路

  • 由于需要存储之前的路径,使得以后能够返回,所以考虑用栈实现

  • 用一个字符串变量temp存储'/'之间的字符串,则输入的字符串类型总共有种,分别为'/','.','..',普通字符串

  • 遍历字符串(若字符串末尾不为"/"则在末尾补一个"/":

    1. '/' :

      若栈为空则将"/"入栈

      1. temp为空 => 不处理
      2. temp == '.' => 不处理
      3. temp == 普通字符串 => temp入栈,"/"入栈
      4. temp == '..':栈顶元素出栈
        1. 若此时栈为空,则将"/"入栈
        2. 若此时栈不为空,则将栈顶元素出栈

      清空temp

    2. 其它字符都拼接到temp中

  • 将栈顶元素依次出栈并逆序拼接

  • 若最终字符串末尾为"/"且长度大于1,则将末尾的"/"消去

代码

class Solution {
    public String simplifyPath(String path) {
        if (path == null || "".equals(path)) {
            return "/";
        }
        
        LinkedList<String> stack = new LinkedList<>();
        StringBuilder result = new StringBuilder();
        StringBuilder temp = new StringBuilder();
        
        stack.push("/");
        if ('/' != path.charAt(path.length() - 1)) {
            path = path + "/";
        }
        
        for (char c : path.toCharArray()) {
            switch (c) {
                case '/':
                    switch (temp.toString()) {
                        case "":
                        case ".":
                            break;
                        case "..":
                            stack.pop();
                            if (stack.isEmpty()) {
                                stack.push("/");
                            } else {
                                stack.pop();
                            }
                            break;
                        default:
                            stack.push(temp.toString());
                            stack.push("/");
                            break;
                    }
                    temp = new StringBuilder();
                    break;
                default:
                    temp.append(c);
                    break;
            }
        }
        
        while (!stack.isEmpty()) {
            result.insert(0, stack.pop());
        }
        
        if (result.length() > 1 && '/' == result.charAt(result.length() - 1)) {
            result.deleteCharAt(result.length() - 1);
        }
        
        return result.toString();
    }
}

相关文章

  • 栈-N71-简化路径

    题目 概述:给定一个绝对路径,简化它,简化规则如下:消去'.'('.'表示当前目录本身消去'..'('..'表示上...

  • 栈-简化路径(71)

    以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。 在 Unix 风格的文...

  • 71. 简化路径/535. TinyURL 的加密与解密

    71. 简化路径 相关标签 : 栈 字符串 535. TinyURL 的加密与解密

  • 简化路径

    以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。 在 Unix 风格的文...

  • 简化路径

    https://leetcode-cn.com/explore/interview/card/bytedance/...

  • 简化路径

    思路一 使用栈来处理遇到 ".." 出栈遇到 "." 不处理其它情况,进栈 最后拼接字符串 Leecode Gol...

  • 简化路径

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/simpli...

  • Swift - 简化绝对路径

    题目 给出一个文件的绝对路径,要求将其简化。举个例子,路径是“/home/”,简化后为“/home”,路径是“/a...

  • 栈和队列(下)

    1. 栈的压入和弹出序列 实现代码: 2. 括号匹配 实现代码: 3. 路径简化 实现代码: 4 丑数 实现代码:...

  • PHP路径简化

    在 Linux 下执行 php 脚本时通常是可以使用以下命令: #/usr/local/php/bin/php t...

网友评论

      本文标题:栈-N71-简化路径

      本文链接:https://www.haomeiwen.com/subject/kdzqwqtx.html