题目分析:简化一个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;
}
};