Leetcode 71. 简化路径

题目.png

题意:给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。
请注意,返回的 规范路径 必须遵循下述格式:
始终以斜杠 '/' 开头。
两个目录名之间必须只有一个斜杠 '/' 。
最后一个目录名(如果存在)不能 以 '/' 结尾。
此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '..')。
返回简化后得到的 规范路径 。

解法:
1.先以/分隔字符串,得到字符串数组,我们分析,字符串数据,可能存在如下几种类型的数据:. or .. or 目录字符串 or 空字符串
2.针对于空字符串和.,我们可以不用处理
3.遍历字符串数组,用队列来保存遍历的数据,如果遇到..并且队首不为空,则移除队首元素,否则,如果不是上述其他字符,则入队尾
4.遍历队列,加上/,输出字符串即可

解题遇到的问题

后续需要总结学习的知识点

##解法1
import java.util.ArrayDeque;
import java.util.Deque;

class Solution {
    public String simplifyPath(String path) {
        String[] cs = path.split("/");
        Deque deque = new ArrayDeque();
        for (int i = 0; i < cs.length; i++) {
            if ("..".equals(cs[i])) {
                if (!deque.isEmpty()) {
                    deque.pollLast();
                }
            } else if (cs[i].length() > 0 && !".".equals(cs[i])) {
                deque.offerLast(cs[i]);
            }
        }

        StringBuilder builder = new StringBuilder();
        if (deque.isEmpty()) {
            builder.append("/");
        } else {
            while (!deque.isEmpty()) {
                builder.append("/" + deque.pollFirst());
            }
        }
        return builder.toString();
    }
}

你可能感兴趣的:(Leetcode 71. 简化路径)