71-简化路径

  1. 简化路径
  • /对字符串进行分隔
    • 可以使用stringstream来分隔字符串,然后对每一段分别处理
  • 继续讨论分隔后的元素。用一个向量保存有意义的子字符串
    • 若为"" 或者.,则直接忽略,用continue直接跳过
    • 若为..且当前向量不为空,则pop出栈顶的一个元素(是..时,代表回上一级目录,则把栈顶的元素出栈,表示删掉它上面挨着的一个路径)
    • 如果遇到不是点,也不是空格,不是回退到上一级目录,那么进栈

比如输入”/../“ ,则分隔后内容为.., 此时保存元素的栈为空,这种情况也要直接忽略(不能入栈)。因此有else if (t != "..")时,才能进行入栈操作:v.push_back(t) 。否则会出现:
20211003223958

class Solution {
public:
    string simplifyPath(string path) {
        string res, t;
        stringstream ss(path);
        vector <string> v;
        while (getline(ss, t, '/')) {
            if (t == "" || t == ".") continue;
            if (t == ".." && !v.empty()) v.pop_back();
            else if (t != "..") v.push_back(t);
        }
        for (string s : v) res += "/" + s;
        return res.empty() ? "/" : res;
    }
};

   转载规则


《71-简化路径》 M 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
设计模式 设计模式
Refactoring.Guru图说设计模式 创建型模式创建型模式提供创建对象的机制, 增加已有代码的灵活性和可复用性。 简单工厂模式 工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的
2021-10-06
下一篇 
N叉树操作 N叉树操作
589. N 叉树的前序遍历 先操作根节点,再递归操作根节点的子节点 /* // Definition for a Node. class Node { public: int val; vector<Node*>
2021-10-03
  目录