简化路径
描述
以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。
在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径
请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。
思路和代码
这题用python等语言会好解决一点。
用一个栈来保存路径,遇到…就出栈,遇到.就不做任何操作,其他都可以入栈。
class Solution {
public:
string simplifyPath(string path) {
path += "/";
stack<string> st;
string dir;
for (auto c : path) {
if (c == '/') {
if (dir == ".." && !st.empty()) {
st.pop();
} else if (dir != ".." && dir != "." && !dir.empty()) {
st.push(dir);
}
dir.clear();
} else {
dir += c;
}
}
string res;
while (!st.empty()) {
auto t = st.top();
st.pop();
res += string(t.rbegin(), t.rend()) + "/";
}
reverse(res.begin(), res.end());
if (res.empty()) res = "/";
return res;
}
};