- 题目:给出一个Unix系统的绝对目录路径,返回简化后的路径。例如:
path = “/home/”, => “/home”
path = “/a/./b/../../c/”, => “/c” - 难度:Medium
- 思路:将输入的string以“/”分割,遍历分割后的元素中,如果为“.”,则继续;如果为“..”并且前面的元素中包含目录,则弹出栈顶元素,否则当前元素不为”..”时,就将该元素压入栈。
- 代码:
C++版
class Solution {
public:
string simplifyPath(string path) {
string res;
string tmp;
vector<string> vec;
stringstream ss(path);
while(getline(ss,tmp,'/')){
if(tmp == "" or tmp == ".") continue;
if(tmp == ".." and !vec.empty()){
vec.pop_back();
}else if(tmp != ".."){
vec.push_back(tmp);
}
}
for(string str:vec){
res += "/" + str;
}
return res.empty()?"/":res;
}
};
Java版
class Solution {
public String simplifyPath(String path) {
String[] res = path.split("/");
LinkedList<String> stack = new LinkedList<String>();
//System.out.print(res);
for(String str:res){
if((str.equals(".")) || (str.equals(""))){
//System.out.println(str);
continue;
}
if((str.equals("..")) && (!stack.isEmpty())){
stack.pollLast();
}else if(!str.equals("..")){
stack.offer(str);
}
}
String result = "";
while(!stack.isEmpty()){
result += "/" + stack.pollFirst();
}
return result.equals("")?"/":result;
}
}