题目

71. 简化路径

题解



代码

import java.util.*;

public class code71 {

    public static String simplifyPath(String path) {
        Stack<String> stack = new Stack<String>();
        for (String item : path.split("/")) {
            // System.out.println("item: " + item);
            if (item.equals("..")) {
                if (!stack.isEmpty()) {
                    stack.pop(); // "/.." 弹出
                }
            } else if (!item.isEmpty() && !item.equals(".")) {
                stack.push(item); // "/abc" 压入
            }
            // "/." 无动作
        }
        String res = "";
        for (String str : stack) { // 从 stack 中的第一个元素遍历到最后一个元素
            // System.out.println("str: " + str);
            res = res + "/" + str;
        }

        if (res.isEmpty()) {
            return "/"; // 只有一个 "/" 的情况下, 也就是根目录的情况,若是根目录,则不能去掉。
        } else {
            return res;
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextLine()) {
            String path = sc.nextLine();
            String res = simplifyPath(path);
            System.out.println(res);
        }
        sc.close();
    }
}

参考

  1. 栈——题解一
  2. 栈——题解二
  3. 直接进行匹配即可——题解三
  4. Absloute path vs relative path in Linux/Unix(Linux/Unix中的绝对路径vs相对路径)
  5. Java split() 方法
  6. 字符串分割–java中String.split()用法
  7. JAVA split 用法
  8. Java Stack 类
  9. Java 列表和队列(二):剖析 LinkedList
  10. Java中用Deque接口代替Stack接口完成栈功能
  11. Java 集合 Stack、Queue、Map插入、移除和遍历
  12. Java集合的Stack、Queue、Map的遍历
  13. Java中foreach的遍历顺序