在家这么久刷了不少题,也想着总结一下,欢迎看到的小伙伴一起打卡,监督学习进步,欢迎加v:15810853703,第二天打卡qaq
题目描述
知识点:栈的应用
以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。
在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径
请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。
示例 1:
输入:"/home/"
输出:"/home"
解释:注意,最后一个目录名后面没有斜杠。
关键点是 根据‘/’将字符串分割 在对分割结果分三种判断
参考题解写的非常棒!
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/simplify-path/
解答
做题技巧
** 根据‘/’将字符串分割 在对分割结果分三种判断 **
** 若为"“或者”.“不做任何处理**
** 若为”…"若栈不为空则pop**
** 其他则入栈**
//参考题解 : https://www.acwing.com/solution/LeetCode/content/3576/ 这篇题解非常棒强推!
class Solution {
public:
string simplifyPath(string path) {
int n = path.size();
vector<string>res;
stack<string>st;
for(int i =0;i< n;){
string cur = "";
int j = i+1;
while(j<n && path[j] != '/')cur +=path[j++];
i = j;
res.push_back(cur);
}
for(int i =0;i<res.size();i++){
if(res[i] == "" || res[i] == ".")continue;
else if(res[i] == ".."){
if(!st.empty())st.pop();
}else st.push(res[i]);
}
string ans = "";
while(!st.empty()){
ans = "/" + st.top() + ans;
st.pop();
}
return ans == ""? "/":ans;
}
};
相似的题目还有 :二叉树的右视图题解
欢迎大家补充~