您的位置:首页 > 其它

LeetCode:Simplify Path

2013-12-09 14:14 211 查看
题目链接

Given an absolute path for a file (Unix-style), simplify it.

For example,
path =
"/home/"
, =>
"/home"

path =
"/a/./b/../../c/"
, =>
"/c"


Corner Cases:

Did you consider the case where path =
"/../"
?
In this case, you should return
"/"
.

Another corner case is the path might contain multiple slashes
'/'
together, such as
"/home//foo/"
.
In this case, you should ignore redundant slashes and return
"/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;
}
}
};


【版权声明】转载请注明出处/article/4879692.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: