当前位置: 面试刷题>> 最长绝对文件路径 (经典算法题500道)


题目描述补充

题目:最长绝对文件路径

在一个字符串中,表示文件系统的绝对路径。在这个字符串中,一个点.表示当前目录,两个点..表示上级目录,单个或多个正斜杠/用作目录分隔符。你需要找出并返回最长的绝对文件路径的长度。

假设输入的字符串是合法的,即:

  • 不会以斜杠/结尾。
  • 不会在两个目录名之间出现两个连续的斜杠//
  • 不会在字符串的开始或结束处出现斜杠/(除了字符串为空的情况)。
  • 每个文件或目录名只包含小写字母。

示例

输入:"/a/b/c/d:../../c" 输出:2 解释:最长的绝对文件路径是/a,它的长度为2。

PHP 示例代码

function lengthLongestPath($input) {
    $stack = []; // 用于模拟路径栈
    $maxLength = 0;
    
    // 使用 / 分割字符串
    $paths = explode('/', $input);
    
    foreach ($paths as $path) {
        if ($path === '.' || $path === '') {
            // 当前目录或空路径,忽略
            continue;
        } elseif ($path === '..') {
            // 返回上级目录
            array_pop($stack);
        } else {
            // 添加到当前路径
            $currentPath = count($stack) > 0 ? implode('/', $stack) . '/' . $path : $path;
            $maxLength = max($maxLength, strlen($currentPath));
            array_push($stack, $path);
        }
    }
    
    return $maxLength;
}

// 测试
echo lengthLongestPath("/a/b/c/d:../../c"); // 输出 2

Python 示例代码

def lengthLongestPath(input):
    stack = []  # 模拟路径栈
    maxLength = 0
    
    # 分割字符串
    paths = input.split('/')
    
    for path in paths:
        if path == '.' or path == '':
            # 当前目录或空路径,忽略
            continue
        elif path == '..':
            # 返回上级目录
            stack.pop() if stack else None
        else:
            # 添加到当前路径
            currentPath = '/'.join(stack + [path]) if stack else path
            maxLength = max(maxLength, len(currentPath))
            stack.append(path)
    
    return maxLength

# 测试
print(lengthLongestPath("/a/b/c/d:../../c"))  # 输出 2

JavaScript 示例代码

function lengthLongestPath(input) {
    let stack = []; // 模拟路径栈
    let maxLength = 0;
    
    // 分割字符串
    const paths = input.split('/');
    
    for (let path of paths) {
        if (path === '.' || path === '') {
            // 当前目录或空路径,忽略
            continue;
        } else if (path === '..') {
            // 返回上级目录
            stack.pop();
        } else {
            // 添加到当前路径
            const currentPath = stack.length > 0 ? `${stack.join('/')}/${path}` : path;
            maxLength = Math.max(maxLength, currentPath.length);
            stack.push(path);
        }
    }
    
    return maxLength;
}

// 测试
console.log(lengthLongestPath("/a/b/c/d:../../c")); // 输出 2

码小课网站中有更多相关内容分享给大家学习,包括但不限于算法题解、数据结构、编程语言基础等,欢迎访问学习。

推荐面试题