题目地址:
https://leetcode.com/problems/simplify-path/
给定一个代表目录的字符串 t t t,返回其最终的真实目录。
用栈来模拟整个过程即可。维护一个答案字符串
s
s
s,保持要么
s
s
s空,要么
s
s
s以/
加文件名结尾。接着遍历
t
t
t,如果遍历到非/
,说明该字符可能是文件的一部分,存起来;否则的话,看存起来的文件名是什么,如果其是两个点,则对
s
s
s的最后一个文件名和/
进行pop;如果存起来的文件名不空也不是单独一个点,则说明是真实文件名,加入答案。代码如下:
class Solution {
public:
string simplifyPath(string s) {
string res, file;
if (s.back() != '/') s += '/';
for (char ch : s) {
if (ch != '/') file += ch;
else {
if (file == "..") {
// 把最后一个文件名去掉
while (res.size() && res.back() != '/') res.pop_back();
// 把最后一个'/'给去掉
if (res.size()) res.pop_back();
} else if (file.size() && file != ".") res += '/' + file;
file.clear();
}
}
if (res.empty()) return "/";
return res;
}
};
时空复杂度 O ( n ) O(n) O(n), n n n为字符串长度。