LeetCode #71:Simplify Path(简化路径)

题目描述

在 *nix 操作系统中,系统对当前目录的管理就是通过栈来实现的,本问题就是对这一过程的模拟。思路是先将 path 串根据 "/" 分割,再对分割出来的子串根据 "." ".." 等规则进行操作。由于 C++ 的 string 没有原生的 split 函数,这里采用 stringstream 对象和 getline() 巧妙实现了这一功能。

class Solution {
public:
    string simplifyPath(string path) {
        stringstream ss;
        ss << path;
        string splitItem;
        vector<string> filenames;
        while(getline(ss, splitItem, '/')) { // 使用字符流对象巧妙实现C++字符串的split操作
            if(splitItem == "" || splitItem == ".") { // 空白和".不理会
                continue;
            } else if(splitItem == ".."){ // 返回上级目录
                if(filenames.size() > 0)
                    filenames.pop_back();
            } else { // 将普通目录压入栈(这里就用vector方便后面遍历取结果)
                filenames.push_back(splitItem);
            }
        }

        string res;
        for(int i = 0; i < filenames.size(); i ++) {
            res.append("/" + filenames[i]);
        }
        if(res == ""){
            return "/";
        }
        return res;
    }
};

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注