当前位置: 面试刷题>> 最长绝对文件路径 (经典算法题500道)
### 题目描述补充
题目:**最长绝对文件路径**
在一个字符串中,表示文件系统的绝对路径。在这个字符串中,一个点`.`表示当前目录,两个点`..`表示上级目录,单个或多个正斜杠`/`用作目录分隔符。你需要找出并返回最长的绝对文件路径的长度。
假设输入的字符串是合法的,即:
- 不会以斜杠`/`结尾。
- 不会在两个目录名之间出现两个连续的斜杠`//`。
- 不会在字符串的开始或结束处出现斜杠`/`(除了字符串为空的情况)。
- 每个文件或目录名只包含小写字母。
### 示例
输入:`"/a/b/c/d:../../c"`
输出:2
解释:最长的绝对文件路径是`/a`,它的长度为2。
### PHP 示例代码
```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 示例代码
```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 示例代码
```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
```
**码小课**网站中有更多相关内容分享给大家学习,包括但不限于算法题解、数据结构、编程语言基础等,欢迎访问学习。