您的位置:首页 > 编程语言 > C语言/C++

LeetCode 71. Simplify Path

2014-07-13 09:21 330 查看
以'/'切分路径,用vector<string> ret保存每一级的文件名;

当前文件名为"."时,忽略;

当前文件名为".."时,若未到达根目录,则ret.pop_back(), 反之忽略;

其他情况都ret.push_back( filename ).

代码:

class Solution
{
public:
string simplifyPath(string path)
{
vector<string> dir;
string ret;

dir.push_back("/");
for (size_t begin, end=0; ; )
{
for (begin=end+1 ; begin<path.size() && path[begin]=='/'; ++ begin) {}
if (begin >= path.size())
{
break;
}
end = path.find('/', begin);
end = end!=string::npos? end: path.size();
auto cur = path.substr(begin, end-begin);
if (cur!="." && cur!="..")
{
dir.push_back(cur + "/");
} else if (cur==".." && dir.size()>1)
{
dir.pop_back();
}
}
for (size_t i = 0; i < dir.size(); ++ i)
{
if (i==0 || i!=dir.size()-1)
{
ret += dir[i];
} else
{
ret += dir[i].substr(0, dir[i].size()-1); // no slash
}
}

return ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode C++