【leetcode】Simplify Path
Simplify Path
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"
.
用一个堆栈来模拟路径的行为,遇到"."不操作,遇到".."退栈,其他情况都压入堆栈。
程序中先把路径分割出来,然后再处理
1 class Solution { 2 3 public: 5 string simplifyPath(string path) { 9 vector<string> spl; 11 spliceStr(path,spl); 15 vector<string> stk; 17 for(int i=0;i<spl.size();i++) 19 { 21 if(spl[i]=="..") 23 { 25 if(!stk.empty()) 27 { 29 stk.pop_back(); 31 } 33 } 35 else if(spl[i]==".") 37 { 39 continue; 41 } 43 else 45 { 47 stk.push_back(spl[i]); 49 } 51 } 55 string result=""; 57 for(int i=0;i<stk.size();i++) 59 { 61 result+="/"+stk[i]; 63 } 67 if(result=="") 69 { 71 result="/"; 73 } 79 return result; 83 } 84 85 86 87 88 89 void spliceStr(string &path,vector<string> &result) 91 { 93 int pre_index=0; 95 string tmp; 97 for(int i=0;i<path.size();i++) 99 { 101 if(path[i]=='/') 103 { 105 tmp=path.substr(pre_index,i-pre_index); 107 if(tmp!="") 109 { 111 result.push_back(tmp); 113 } 115 pre_index=i+1; 117 } 119 } 122 123 if(pre_index<path.size()) 125 { 127 tmp=path.substr(pre_index,path.size()-pre_index); 129 if(tmp!="") 131 { 133 result.push_back(tmp); 135 } 137 } 139 } 141 };
分类:
算法研究
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现