题解47 | 山重水复疑无路,点点杠杠又一村#简化目录路径#

简化目录路径

https://www.nowcoder.com/practice/3177bcbfd947409ba833efb5a5b4a24c

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`。

2024考研数据结构 文章被收录于专栏

本人考研刷算法题,立此专栏练习强化。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务