您的位置:首页 > 其它

LeetCode: Simplify Path

2012-11-05 14:21 316 查看
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) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int len = path.size();
if (len == 0) return "/";
vector<string> stk;
int left = '/' == path[0]? 0: -1;
int right;
while(left < len)
{
right = left;
while(++right < len && '/' != path[right]);
string part = path.substr(left+1, right-left-1);
left = right;
if("." == part || "" == part)
continue;
else if(".." == part)
{
if(stk.size() > 0)
stk.pop_back();
}
else
stk.push_back(part);
}

if (stk.size() > 0)
{
string result = "";
for (int i = 0; i < stk.size(); ++i)
{
result += '/' + stk[i];
}
return result;
}
else
return "/";
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: