【LeetCode】71. 简化路径 结题报告 (C++)

本文介绍了一个LeetCode上的路径简化问题,并提供了一种使用栈和stringstream的C++解决方案。该算法能够处理包括连续斜杠和相对路径在内的各种边界情况。

原题地址:https://leetcode-cn.com/problems/simplify-path/description/

题目描述:

给定一个文档 (Unix-style) 的完全路径,请进行路径简化。

例如,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"

边界情况:

  • 你是否考虑了 路径 = "/../" 的情况?
    在这种情况下,你需返回 "/" 。
  • 此外,路径中也可能包含多个斜杠 '/' ,如 "/home//foo/" 。
    在这种情况下,你可忽略多余的斜杠,返回 "/home/foo" 。

解题方案:

利用栈来辅助解题,通过stringstream完成字符串的拆分,这里利用到了函数getline()。

注意:学习关键字auto的用法和stringstream的用法

class Solution {
public:
    string simplifyPath(string path) {
        vector<string> st;
        vector<string> nodes;
        string result;
        split(path, '/', nodes);
        for(auto node : nodes) {
            if(node == "" || node == ".")  continue;
            if(node == ".." && !st.empty())  st.pop_back();
            else if(node != "..")  st.push_back(node);
        }
        for(auto it : st) result += "/" + it;
        return result.empty() ? "/" : result;
    }

    void split(string s, char delim, vector<string>& nodes) {
        string temp;
        stringstream ss(s);
        while(getline(ss, temp, delim)) {
            nodes.push_back(temp);
        }
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值