Lectura

simplificar el camino(Java, Python, PHP, Javascript)

Dada una ruta absoluta a un archivo, conviértela a la ruta simplificada.

  • Un punto se refiere al directorio actual.
  • Un punto doble se refiere al directorio de un nivel superior.
  • Cualquier barra diagonal múltiple consecutiva (//) se trata como una sola barra diagonal '/'.
  • Cualquier otro formato se trata como nombres de archivos.
path = "/home/../foo/" resultado = "/foo"

Video

Código de la solución

Java

class Solution {
    public String simplifyPath(String path) {
        Deque<String> stack = new ArrayDeque<>();
        String[] components = path.split("/");

        for (String directory : components) {
            if (directory.equals("") || directory.equals(".")) {
                continue;
            }
            if (directory.equals("..")) {
                if (!stack.isEmpty()) {
                    stack.pop();
                }
            } else {
                stack.push(directory);
            }
        }

        StringBuilder result = new StringBuilder();
        for (String dir : stack) {
            result.insert(0, "/" + dir);
        }

        return result.length() == 0 ? "/" : result.toString();
    }
}

Python

class Solution(object):
    def simplifyPath(self, path):
        stack = []
        components = path.split("/")

        for directory in components:
            if directory == "" or directory == ".":
                continue
            if directory == "..":
                if stack:
                    stack.pop()
            else:
                stack.append(directory)

        return "/" + "/".join(stack)

PHP

class Solution {

    /**
     * @param String $path
     * @return String
     */
    function simplifyPath($path) {
        $stack = [];
        $components = explode('/', $path);

        foreach ($components as $directory) {
            if ($directory === '' || $directory === '.') {
                continue;
            }
            if ($directory === '..') {
                if (!empty($stack)) {
                    array_pop($stack);
                }
            } else {
                array_push($stack, $directory);
            }
        }

        return '/' . implode('/', $stack);
    }
}

JavaScript

/**
 * @param {string} path
 * @return {string}
 */
var simplifyPath = function(path) {
    const stack = [];
    const components = path.split('/');

    for (const directory of components) {
        if (directory === '' || directory === '.') {
            continue;
        }
        if (directory === '..') {
            if (stack.length > 0) {
                stack.pop();
            }
        } else {
            stack.push(directory);
        }
    }

    return '/' + stack.join('/');
};

Si te gustó el contenido, ¡visita mi canal de YouTube para ver más explicaciones sobre algoritmos y estructuras de datos!