思路:
根据题意:中间是".“的情况直接去掉,是”…“时删掉它上面挨着的一个路径,如果是空的话返回”/",如果有多个"/"只保留一个。
所以我们可以将路径保存在一个字符串数组中,每次提取绝对路径中的一个子路径并存入字符串数组中,不提取‘/’,遇到“.”时,直接将“.”去掉,遇到“…”时,将字符串数组中的最后一个字符串去掉。最后在每个字符串前面添加‘/’即可。
class Solution {
public:
string simplifyPath(string path) {
vector<string> tmp;
int i=0;
while(i<path.size())
{
while(path[i]=='/') ++i;
if(i==path.size()) break;
int start=i;
while(path[i]!='/'&&i<path.size()) ++i;
string s=path.substr(start,i-start);
if(s=="..") { if(tmp.size()!=0) tmp.pop_back();}
else if(s!=".") tmp.push_back(s);
}
if(tmp.empty()) return "/";
string ans;
for(int i=0;i<tmp.size();++i)
ans+='/'+tmp[i];
return ans;
}
};