给定一个文档(Unix-style)的完全路径,请进行路径简化。
样例
"/home/"
, => "/home"
"/a/./b/../../c/"
, => "/c"
挑战
-
你是否考虑了 路径 =
"/../"
的情况?在这种情况下,你需返回
"/"
。 -
此外,路径中也可能包含双斜杠
'/'
,如"/home//foo/"
。在这种情况下,可忽略多余的斜杠,返回
"/home/foo"
。
思路:
1. 将字符串按“/”划分。
2. 将有意义的字符串入栈,如果遇到“..”则出栈。
3. 最后将栈中剩余字符串以"/"连接,并返回。未空默认返回“/”
4. 注意刚开始加上“/”,方便以后的划分。
代码如下:
class Solution {
public:
/**
* @param path the original path
* @return the simplified path
*/
string simplifyPath(string& path) {
// Write your code here
stack<string> s1,s2;
string temp = "";
path +="/";
for(int i = 0;i!=path.size();++i){
if(path[i] == '/'){
if(temp == ".."){
if(!s1.empty()){
s1.pop();
}
}
else if(temp == "." || temp == ""){
;
}
else{
s1.push(temp);
}
temp = "";
}
else{
temp += path[i];
}
}
if(s1.empty()){
return "/";
}
string res = "";
while(!s1.empty()){
res = "/" +s1.top()+res;
s1.pop();
}
return res;
}
};