LeetCode 71. 简化路径 题解 C/C++

主要思路

首先想到将字符串按 ‘/’ 分隔开,然后分情况讨论该子串类型,如果是当前目录,即一个点 " . “或者是空串”"我们跳过就可以了不需要做处理,如果是上一级目录,即两个点 " . . "我们需要返回上一级目录,如果此时栈非空,我们需要将栈顶元素出栈。最后如果是其他类型的目录我们直接入栈就好,它是最终合法的需要输出的路径。我们这里使用vector模拟栈。
因为c++语言没有split这样的函数,我们使用如下方法分隔处理字符串:

string str;
stringstream ss(path);
while (getline(ss, str, '/')){}
class Solution {
public:
	string simplifyPath(string path) {
		string str = "";
		stringstream ss(path);
		vector<string> vecs;
		while(getline(ss,str,'/')) {//以‘/’ 分隔,将字符串写入str中
			if(str=="."||str=="")continue;//这里有str为空是因为分割链表后可能为空,如本来就是‘/’分割后为空
			else if(str=="..") {
				if(!vecs.empty())
					vecs.pop_back();
			}
			else vecs.emplace_back(str);
		}
		string ret="";
		for(size_t i = 0;i<vecs.size();++i) {
			ret += "/"+vecs[i];
		}
		if(vecs.empty())ret = "/";
		return ret;
	}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值