leetcode_071 Simplify Path

题目分析:简化一个Unix文件路径,注意如下情况:

                   1)“/."表示本级目录,可直接忽略;

                   2)“/..”表示返回上一级目录,若上一级目录存在,连通“/.."一并删除,否则只

                         删除"/..";

                   3)若去除冗余后路径为空,返回"/";

                   4)若包含连续"/",删除多余的;

                   5)若路径不是单个"/",删除路径最后一个"/"。

解题思路

                           用字符串分割思想进行求解

                           1)用"/"分割字符串,遍历每个分割部分,存入一个vector<string>中;

                           2)若当前分割部分为空,说明有连续的"/"或是最后一个“/",忽略;

                           3)若当前部分为“.",忽略;

                           4)若当前部分为"..",若vector不为空,去除vector最后一个元素;

                           5)最后,将vector中的string用"/"连接起来,得到最终结果。

class Solution
{
	public:
		string simplifyPath(string path)
		{  
			string result;
			string temp;
			vector<string> list;
			stringstream ss(path);
			// 取得每个分割后的字符串 
			while (getline(ss, temp, '/'))
			{
				// 处理分割后的字符串为" "或"."情况 ,即不做处理 
				if (temp.length() == 0 || temp == ".")
					continue;
				// 处理分割后的字符串为".."情况,即返回上一层目录 
				if (temp == "..")
				{
					if (!list.empty())
					{
						list.pop_back(); 
					}
				}
				// 正常目录情况下的处理,保存目录内容 
				else
				{
					list.push_back(temp);
				} 
			}
			// 在每个分割后的字符串之间加入"/",用于形成最后的目录 
			for (int i = 0; i < list.size(); i++)
			{
				result += "/";
				result += list[i];
			} 
			if (result.length() == 0)
				result = "/";
			return result; 
		}
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值