题目:
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
Corner Cases:
- Did you consider the case where path =
"/../"
?
In this case, you should return"/"
. - Another corner case is the path might contain multiple slashes
'/'
together, such as"/home//foo/"
.
In this case, you should ignore redundant slashes and return"/home/foo"
.
题目来源:https://oj.leetcode.com/problems/simplify-path/
解题思路:从左往右扫描,如果遇到./就删除,如果遇到../就删除上一目录。
#include<iostream>
#include <string>
using namespace std;
string simplifyPath(string path)
{
if(path.empty())
return "";
string result(1,'/');
for(size_t i=1;i<path.size();)
{
string temp;
while(i<path.size() && path[i]!='/')
temp+=path[i++];
if(temp==".")
temp="";
else if(temp=="..")//如果是../则返回上一层目录
{
result.pop_back();//删除最末尾的'/'
for(int j=result.size()-1;j>=0 && result[j]!='/';j--)
result.pop_back();
}
else
result+=temp;
if(result.back()!='/')
result.push_back('/');
i++;//跳过当前的'/'
}
if(result.size()!=1 && result.back()=='/')
result.pop_back();
return result;
}
int main()
{
string path="/PIp/UoeWf/aS";
string s=simplifyPath(path);
system("pause");
return 0;
}