71. Simplify Path
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
class Solution {
public:
string simplifyPath(string path)
{
vector<string> _path;
getpath(_path, path); //都拆分然后放到_path里面
if (_path.size() == 0)
return "/";
stack<string> m; //使用一个栈来控制进出
for (int i = 0; i < _path.size(); i++)
{
if (_path[i] == "." || (_path[i] == ".." && m.empty()))
continue;
else if (_path[i] == ".." && !m.empty())
m.pop();
else
m.push(_path[i]);
}
string ret = "";
while (!m.empty())
{
ret = "/" + m.top() + ret;
m.pop();
}
return ret == "" ? "/" : ret;
}
void getpath(vector<string> &_path, string path)
{
path = path.substr(1, path.size() - 1);
while ( path.find("/") != -1 ) //string.find找不到返回 -1
{
int pos = path.find("/");
if (pos > 0)
_path.push_back( path.substr(0,pos) );
path = path.substr(pos + 1, path.size() - pos - 1);
}
if (path.size() > 0)
_path.push_back( path );
}
};