Simplify Path

8073 단어 Path
Given an absolute path for a file (Unix-style), simplify it.
For example,path =  "/home/" , =>  "/home" path =  "/a/./b/../../c/" , =>  "/c"
click to show corner cases.
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" .
이 문 제 는 사고 방향 이 매우 뚜렷 하 므 로 stack 으로 한다.마지막 으로 출력 할 때 대기 열 로 출력 해 야 합 니 다.
/.. / 이전 층 으로 돌아 가기
/. / 현재 층
 1 public class Solution {

 2     public String simplifyPath(String path) {

 3         // Start typing your Java solution below

 4         // DO NOT write main() function

 5         if(path == null) return null;

 6         String[] element = path.split("/");

 7         Stack<String> st = new Stack<String>();

 8         for(int i = 0; i < element.length; i ++){

 9             if(element[i].length() != 0){

10                 if(element[i].equals("..")){

11                     if(st.isEmpty() != true)

12                         st.pop();

13                 }else if(element[i].equals(".")){

14                 }else{

15                     st.push(element[i]);

16                 }

17             }

18         }

19         StringBuffer sb = new StringBuffer();

20         if(st.isEmpty() == true){

21             sb.append("/");

22         }else{

23             for(int i = 0; i < st.size(); i ++){

24                 sb.append("/");

25                 sb.append(st.elementAt(i));

26             }   

27         }

28         return sb.toString();

29     }

30 }

 세 번 째:
 1 public class Solution {

 2     public String simplifyPath(String path) {

 3         String[] parts = path.split("/");

 4         LinkedList<String> ll = new LinkedList<String> ();

 5         for(int i = 0; i < parts.length; i ++){

 6             System.out.println(parts[i]);

 7             if(parts[i].equals("") || parts[i].equals(".") || (parts[i].equals("..") && ll.size() == 0)) continue;

 8             else if(parts[i].equals("..") && ll.size() != 0) ll.removeLast();

 9             else ll.add(parts[i]);

10         }

11         StringBuffer sb = new StringBuffer();

12         while(ll.size() != 0){

13             sb.append("/");

14             sb.append(ll.remove());

15         }

16         if(sb.length() == 0) sb.append("/");

17         return sb.toString();

18     }

19 }

좋은 웹페이지 즐겨찾기