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

    https://oj.leetcode.com/problems/simplify-path/

    思路:先按'/'分割路径,存入一个stack中,注意遇到'.'和空字符要忽略,遇到'..'要pop,正常路径push,最后依次pop组合成结果。

    import java.util.Stack;
    
    public class Solution {
        public String simplifyPath(String path) {
            if (path == null || path.length() == 0)
                return path;
            Stack<String> stack = new Stack<String>();
            String[] oldPaths = path.split("/");
            for (String each : oldPaths) {
                if (each.equals(""))
                    continue;
                if (each.equals("."))
                    continue;
                if (each.equals("..")) {
                    if (!stack.isEmpty())
                        stack.pop();
                } else {
                    stack.push(each);
                }
    
            }
            if (stack.isEmpty())
                return "/";
    
            StringBuilder sb = new StringBuilder();
            while (!stack.isEmpty()) {
                sb.append(new StringBuffer(stack.pop()).reverse().toString());
                sb.append("/");
            }
    
            return sb.reverse().toString();
        }
    
        public static void main(String[] args) {
            System.out.println(new Solution().simplifyPath("/a/./b/../../c/"));
            System.out.println(new Solution().simplifyPath("//a//b//c//"));
            System.out.println(new Solution().simplifyPath("/home/.//aa/.././"));
            System.out.println(new Solution().simplifyPath("/../..//.././/."));
    
        }
    }
    View Code
  • 相关阅读:
    BackgroundWorker原理剖析
    委托异步调用时BeginInvoke的陷阱处理
    线程静态在对象缓存中的妙用
    值得珍藏的.NET源码,不保存就没机会了
    .NET 4.5.1 参考源码索引
    .NET 4.5 参考源码索引
    .NET 4.0 参考源码索引
    WWF3.5SP1 参考源码索引
    WCF3.5 SP1 参考源码索引
    .NET 3.5.1 参考源码索引
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3812626.html
Copyright © 2011-2022 走看看