Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
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"
.
感觉很多情况下leetcode考研的是编程时对边界条件的考虑。不看提示时考虑了情况1、3,没考虑2
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package Reverse;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author suisuihan
*/
public class GetSimplifyPath {
public String simplifyPath(String path) {
List<String> retpath = new ArrayList<>();
String[] A= path.trim().split("/");
String ret = "";
for(int i = 1; i < A.length; i++){
if(A[i].equals("..")){
if(retpath.size() == 0){
continue;
}
retpath.remove(retpath.size()-1);
}else if(A[i].equals(".")||A[i].equals("")){
continue;
} else{
retpath.add(A[i]);
}
}
if(retpath.size()==0){
return "/";
}
for(int j = 0; j < retpath.size(); j++){
ret = ret + "/"+retpath.get(j);
}
return ret;
}
public static void main(String[] args) {
GetSimplifyPath test = new GetSimplifyPath();
String A = "/a/./b//../../c/";
System.out.println(test.simplifyPath(A));
}
}