leetcode----71. Simplify Path

链接:

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

大意:

简化Unix路径(路径以全路径形式给出)。例子:

leetcode----71. Simplify Path_第1张图片

leetcode----71. Simplify Path_第2张图片

思路:

栈思想。

首先,对给定的全路径字符串path以"/"分割为字符串数组。创建一个顺序栈(顺序栈比链式栈速度更快),依次对比字符串数组中的每个元素,判断当前元素是该入栈还是栈顶元素弹出还是栈不变继续查看下一个字符串。可有以下三种情况:

(1)若当前字符串为"..",则意味着当前栈顶元素弹出(即栈减少一个元素)。此时需注意,如果栈此时为空,则不对栈进行改变

(2)在不满足(1)的前提下,若当前字符串不是"."也不是"",则将当前字符串入栈

(3)在不满足(1)和(2)的前提下,则此时字符串为"."或者"",则不对栈进行任何操作,继续查看下一个字符串

代码:

class Solution {
    public String simplifyPath(String path) {
        String[] strs = path.split("/"), stack = new String[strs.length];
        int top = -1, i = 1; // top指向栈顶元素,从strs[1]开始判断是否入栈出栈
        while (i < strs.length) {
            if (strs[i].equals("..")) {
                if (top != -1)
                    top--; // 出栈    
            } else if (!strs[i].equals(".") && !strs[i].equals(""))
                stack[++top] = strs[i]; // 入栈
            i++;
        }
        if (top == -1)
            return "/"; // 栈空则返回根目录
        i = 0;
        StringBuilder sb = new StringBuilder();
        while (i <= top) {
            sb.append("/" + stack[i++]);
        }
        return sb.toString();
    }
}

结果:

leetcode----71. Simplify Path_第3张图片

结论:

思想就是利用栈后进先出的特点配对路径中的".."可以返回到上一级的特性。可以使用顺序栈时优先使用顺序栈 

 

 

你可能感兴趣的:(leetcode,leetcode)