题目链接: https://leetcode.com/problems/simplify-path/
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
思路: 将两个'/'之间的目录提取出来以字符串的形式存在数组中, 也就是一层目录当成一个字符串:
1. 如果是".."并且目录不为空, 就将上一个目录从数组删除,
2. 如果是"."或者为空, 那么就这个目录就是无意义的, 抛弃
为方便处理, 我们可以在字符串末尾加一个'/', 这样就一直提取两个'/'之间的值, 直到结束, 如果最后目录为空, 则返回"/".
代码如下:
class Solution {
public:
string simplifyPath(string path) {
vector<string> vec;
path += '/';
for(int i = 1; i < path.size(); i++)
{
int pos = path.find('/', i);
string tem = path.substr(i, pos-i);
if(tem == "..")
{
if(vec.size()>0) vec.pop_back();
}
else if(!(tem.size()==0 || tem==".")) vec.push_back("/"+tem);
i = pos;
}
string ans;
for(auto val: vec) ans += val;
return ans.size()==0?"/":ans;
}
};