http://www.cnblogs.com/TenosDoIt/p/3465328.html
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
Corner Cases:
"/../"
? "/"
.'/'
together, such as "/home//foo/"
. "/home/foo"
.分析:需要注意的是/…可以表示名字为…的路径,路径的最后可能没有/。可以利用栈,碰到正常路径压入栈中,碰到/.不作任何操作,碰到/..删除栈顶元素。下面代码中用数组来模拟栈
class Solution {
public:
string simplifyPath(string path) {
int len = path.size();
vector<string> vec;
int i = 0, index = 0;
while(i < len)
{
int j = path.find('//', i + 1);
string tmp;
if(j != string::npos)
tmp = path.substr(i, j - i);
else {tmp = path.substr(i, len); j = len;}
if(tmp == "/");
else if(tmp == "/.");
else if(tmp == "/..")
{if(!vec.empty())vec.pop_back();}
else
vec.push_back(tmp);
i = j;
}
if(vec.empty())return "/";
else
{
string res;
for(int i = 0; i < vec.size(); i++)
res += vec[i];
return res;
}
}
};