class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param path string字符串
* @return string字符串
*/
string simplifyPath(string path) {
// write code here
string ans, beta;
//如果路径的最后不是'/',则在路径字符串的最后添加上'/',这样才可以处理最后一个路径
if (path.back() != '/') {
path += '/';
}
for (auto c : path) {
if (c != '/') {
beta += c;
}
else {
if (beta == "..") {
//情况1:如果当前记录的b是两个点,则返回上一层的目录,
while (ans.size() && ans.back() != '/') {
ans.pop_back();
}
//再判断一下如果a不为空,就将/也弹出
if (ans.size()) {
ans.pop_back();
}
} //情况2:如果b不是'.'且b不为空,就将b记录的英文字符串的前面添加一个‘/’
else if (beta != "." && beta != "") {
ans += '/' + beta;
}
beta.clear();
//每次将记录路径的英文字符清空
}
}
if (ans.empty()) ans = '/';
return ans;
}
};
基本算法思想:
给定一个路径字符串,要求简化该路径并返回简化后的路径字符串。
简化路径的规则如下:
- 使用'/'作为路径分隔符。
- '.' 表示当前目录,'..' 表示上级目录。
- 连续的多个'/'视为一个'/'。
- 最后一个字符不是'/'。
具体实现思路如下:
1. 创建一个空字符串 `ans` 用于存储简化后的路径。
2. 如果路径的最后一个字符不是'/',则在路径字符串的最后添加'/',以便处理最后一个路径。
3. 遍历路径字符串中的每个字符:
- 如果字符不是'/',将其加入临时字符串 `beta` 中。
- 如果字符是'/',则根据 `beta` 的值进行判断:
- 如果 `beta` 是 "..",则需要返回上一级目录,即将 `ans` 中的最后一个路径删除。
- 如果 `beta` 不是 "." 且不为空字符串,将 `beta` 添加到 `ans` 中,并在前面加上'/'。
- 清空 `beta`,准备记录下一个路径。
4. 如果 `ans` 是空字符串,则将其设置为'/'。
5. 返回 `ans`。
时间复杂度:
O(n)其中 n 是路径字符串的长度。需要遍历路径字符串中的每个字符。
空间复杂度:
O(n)需要额外的空间存储临时字符串 `beta` 和简化后的路径 `ans`。

京公网安备 11010502036488号