给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中
请注意,返回的 规范路径 必须遵循下述格式:
本题是一道典型的用栈解决的问题,下面我们来简化一下这个问题
以 path = “/a/./b/…/…/c/” 为例,对这样的字符串 path 我们很难读取处理,而我们将其稍微简化为 a, b, … , … , c 这样的字符串数组,我们直接对每个文件名进行入栈出栈操作就会简单的多。遇见两个点…我们就将前一文件名字符串出栈,否则就将字符串数组入栈,最后进行整合即可。
public String simplifyPath(String path) {
Deque<String> stack = new LinkedList<>();
String[] str = path.split("/");
for(int i=0; i<str.length; i++){
// 栈不为空,且当前字符串为 .. ,前进一个目录
if(!stack.isEmpty() && str[i].equals("..")){
stack.removeLast();
} else{
// 字符串不为空,不为一个 . , 当前文件加入到栈中
if(str[i].length() !=0 && !str[i].equals("..") && !str[i].equals(".")){
stack.addLast(str[i]);
}
}
}
StringBuilder sb = new StringBuilder();
// 整合过程
sb.append("/");
while(!stack.isEmpty()){
sb.append(stack.removeFirst());
if(stack.size() != 0){
sb.append("/");
}
}
return sb.toString();
}