1. 程式人生 > 遊戲 >《死亡細胞》銷量超600萬 2022年Q1推出新DLC

《死亡細胞》銷量超600萬 2022年Q1推出新DLC

給你一個字串 path ,表示指向某一檔案或目錄的Unix 風格 絕對路徑 (以 '/' 開頭),請你將其轉化為更加簡潔的規範路徑。

在 Unix 風格的檔案系統中,一個點(.)表示當前目錄本身;此外,兩個點 (..)表示將目錄切換到上一級(指向父目錄);兩者都可以是複雜相對路徑的組成部分。任意多個連續的斜槓(即,'//')都被視為單個斜槓 '/' 。 對於此問題,任何其他格式的點(例如,'...')均被視為檔案/目錄名稱。

請注意,返回的 規範路徑 必須遵循下述格式:

始終以斜槓 '/' 開頭。
兩個目錄名之間必須只有一個斜槓 '/' 。
最後一個目錄名(如果存在)不能 以 '/' 結尾。
此外,路徑僅包含從根目錄到目標檔案或目錄的路徑上的目錄(即,不含 '.' 或 '..')。
返回簡化後得到的 規範路徑 。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/simplify-path
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;

class Solution {
    public static String simplifyPath(String path) {
        if (path == null || path.length() == 0) {
            return path;
        }

        String[] words = path.split("[/]{1,}");

        Stack<String> stack = new Stack<>();

        for (String word : words) {
            if (!"".equals(word) && !".".equals(word)) {
                if (word.equals("..")) {
                    if (!stack.isEmpty()) {
                        stack.pop();
                    }
                } else {
                    stack.push(word);
                }
            }
        }

        return "/" + String.join("/", new ArrayList<>(stack));
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            System.out.println(simplifyPath(in.next()));
        }
    }
}
心之所向,素履以往 生如逆旅,一葦以航