您的位置:首页 > 其它

Leetcode | Simplify Path

2014-10-23 16:11 232 查看
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".

这里用了一个vector来模拟栈。方便正序输出。

class Solution {
public:
string simplifyPath(string path) {
if (path.empty()) return "/";
path.push_back('/');
int start = -1, end;
vector<string> st;
while ((end = path.find('/', start + 1)) != string::npos) {
string tmp = "";
if (end - start - 1) {
tmp = path.substr(start + 1, end - start - 1);
}
if (tmp == ".." && !st.empty()) st.pop_back();
if (!tmp.empty() && tmp != "." && tmp != "..") st.push_back(tmp);
start = end;
}
stringstream ans;
for (int i = 0; i < st.size(); i++) {
ans << '/' << st[i];
}
if (!ans.str().empty()) return ans.str();
return "/";
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: