【leetcode刷题笔记】Simplify Path

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".

题解:
  1. 用split函数将path按照一个或者多个(正则表达式实现)'/'分成不同的字符串存放在数组positions中。
  2. 遍历positions,如果遇到非"..",".",""的字符串,就放入answers列表中;如果遇到".."且answers不为空,就把answers尾部的字符串扔掉。
  3. 最后把answers中的字符串用"/"连接起来,注意在连接后的字符串结尾会多一个"/',可以substring一下result去掉。

代码如下:

 1 public class Solution {
 2     public String simplifyPath(String path) {
 3         ArrayList<String> answers = new ArrayList<String>();
 4         String[] positions = path.split("/+");
 5         for(int i = 0;i < positions.length;i++){
 6             if(positions[i].equals("..")){
 7                 if(answers.size() > 0)
 8                     answers.remove(answers.size()-1);
 9             }
10             else if(!positions[i].equals(".") && !positions[i].equals(""))
11             {
12                 answers.add(positions[i]);
13             }
14         }
15         
16         String result = new String("/");
17         for(String s:answers)
18             result += s + "/";
19         
20         if(result.length() > 1)
21             result = result.substring(0,result.length()-1);
22         
23         return result;
24     }
25 }

 

posted @ 2014-07-24 10:07  SunshineAtNoon  阅读(253)  评论(0编辑  收藏  举报