您的位置:首页 > 其它

文件路径简化-堆栈

2017-09-24 15:38 120 查看

Simplify Path No.71

Given an absolute path for a file (Unix-style), simplify it.For example,path = 
"/home/"
, => 
"/home"
path = 
"/a/./b/../../c/"
, => 
"/c"
如果仅仅从不断replace输入路径的角度出发,会非常复杂。如果用一个栈来一次存储各级路径的directory名字,然后重组,会简便一些,这也是文件路径简化类题目的常用思路。为了末尾可以顺序遍历栈重组path,我们不用传统的stack lib,而用vector来实现栈,这样可以方便顺序遍历。class Solution {public:string simplifyPath(string path) {if(path.length() == 0) return "";vector<string> v;int p = 0, start = 0;while(p < path.length()){if(path[p] == '/') ++p;else{start = p;while(p < path.length() && path[p] != '/') ++p;string temp = path.substr(start, p-start);if(temp == ".."){if(!v.empty()) v.pop_back(); //遇到".."就出栈else{if(path[0] != '/') v.push_back(temp); //如果没东西可以出,就要看path是否以根目录开头了,不是以根目录开头的话,".."要进栈的}}else if(temp == "."){} //遇到"."就跳过else if(temp.length() > 0){v.push_back(temp);}}}string res = (path[0] == '/' ? "/" : ""); //重组pathfor(vector<string>::iterator i = v.begin(); i < v.end(); ++i){res.append(*i);if(i < v.end()-1) res.append("/");}return res;}};

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: