• [leetcode] Simplify Path


    题目:(Stack, String)

    Given an absolute path for a file (Unix-style), simplify it.

    For example,
    path = "/home/", => "/home"
    path = "/a/./b/../../c/", => "/c"

    click to show corner cases.

    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".
    题解:
    主要是对路径简化定义的了解:
    引用http://www.cnblogs.com/springfor/p/3869666.html

    这是一道简化路径的题,路径简化的依据是:

    当遇到“/../"则需要返回上级目录,需检查上级目录是否为空。

    当遇到"/./"则表示是本级目录,无需做任何特殊操作。 

    当遇到"//"则表示是本级目录,无需做任何操作。

    当遇到其他字符则表示是文件夹名,无需简化。

    当字符串是空或者遇到”/../”,则需要返回一个"/"。

    当遇见"/a//b",则需要简化为"/a/b"。

    根据这些要求,我需要两个栈来解决问题。

    先将字符串依"/"分割出来,然后检查每个分割出来的字符串。

    当字符串为空或者为".",不做任何操作。

    当字符串不为"..",则将字符串入栈。

    当字符串为"..", 则弹栈(返回上级目录)。

    参考别人的答案:
    public class Solution {
        public String simplifyPath(String path) {
            if(path==null||path.length()==0)
               return path;
               
            Stack<String> stack = new Stack<String>();
            String [] s = path.split("/");
            
            for (int i=0; i<s.length; i++)
            {
                if(s[i].length()==0||s[i].equals("."))
                   continue;
                else if(!s[i].equals(".."))
                   stack.push(s[i]);
                else
                {
                    if(!stack.isEmpty())
                       stack.pop();
                }
            }
            
            Stack<String> temp = new Stack<String>();
            
            while(!stack.isEmpty())
                 temp.push(stack.pop());
                 
            StringBuffer result = new StringBuffer();
            
            while(!temp.isEmpty())
                result.append("/"+temp.pop());
        
            if(result.length()==0)
               result.append("/");
               
            return result.toString();
        }
    }
  • 相关阅读:
    浮动
    导航
    Json
    节点
    评论框
    WebClient 指定出口 IP
    IIS8 下 JS, CSS 等静态文件出现 500 错误
    使用 ffmpeg 转换 mov 视频
    使用 ildasm 和 ilasm 修改程序集的的引用信息
    2020-01-08 工作日记:无题
  • 原文地址:https://www.cnblogs.com/fengmangZoo/p/4183797.html
Copyright © 2020-2023  润新知