首页 > 代码库 > 【leetcode】Simplify Path
【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"
click to show corner cases.
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 };
【leetcode】Simplify Path
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。