标签:
原题链接在这里:https://leetcode.com/problems/simplify-path/
首先用string.split 把原有path 按照"/"分开 存入 String 数组strArr中。
从肉往后扫描数组,遇到"." 和 " "直接跳过,遇到正常字符就压入栈中,遇到".."时若stack不是空就pop()一次。
最后将stack反转,然后一个一个出栈加入到StringBuilder中即可。
Note: 注意corner case 如"///", 此时应该返回"/", 但若是用split拆分是返回一个空的strArr, 所以当stack是空的时候,特殊返回"/".
AC Java:
1 public class Solution { 2 public String simplifyPath(String path) { 3 if(path == null || path.length() == 0){ 4 return path; 5 } 6 //split string into array 7 //when encoutering "." or " ", continue 8 //when encoutering "..", if stack is not empty, pop stack and return to upper level 9 //when encoutering else, push into stack. 10 int len = path.length(); 11 String [] strArr = path.split("/"); 12 Stack<String> stk = new Stack<String>(); 13 for(int i = 0; i<strArr.length; i++){ 14 if(strArr[i].equals(".")||strArr[i].length() == 0){ 15 continue; 16 }else if(strArr[i].equals("..")){ 17 if(!stk.isEmpty()){ 18 stk.pop(); 19 } 20 }else{ 21 stk.push(strArr[i]); 22 } 23 } 24 25 StringBuilder sb = new StringBuilder(); 26 27 // Corner case like "///", it should return "/". 28 if(stk.size() == 0){ 29 return "/"; 30 } 31 32 //Reverse the stack 33 Collections.reverse(stk); 34 while(!stk.isEmpty()){ 35 sb.append("/" + stk.pop()); 36 } 37 return sb.toString(); 38 } 39 }
标签:
原文地址:http://www.cnblogs.com/Dylan-Java-NYC/p/4825095.html