zoukankan      html  css  js  c++  java
  • 【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 }
  • 相关阅读:
    自适应高度的 文本框
    点击小图片遮罩显示大图片
    C++中的声明与定义
    LeetCode_Bit Manipulation
    “纯”面向对象
    指针和引用
    new和delete用法小结
    C++中的变量属性小结
    C++的一些黑暗料理
    Python中的字典和集合
  • 原文地址:https://www.cnblogs.com/sunshineatnoon/p/3864907.html
Copyright © 2011-2022 走看看