码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode Simplify Path

时间:2015-09-21 07:01:15      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

原题链接在这里: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 }

 

LeetCode Simplify Path

标签:

原文地址:http://www.cnblogs.com/Dylan-Java-NYC/p/4825095.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!