zoukankan      html  css  js  c++  java
  • 71. Simplify Path

        /*
         * 71. Simplify Path
         * 2016-5-10 by Mingyang
         * 这是一道简化路径的题,路径简化的依据是:
         * 当遇到“/../"则需要返回上级目录,需检查上级目录是否为空。
         * 当遇到"/./"则表示是本级目录,无需做任何特殊操作。 
         * 当遇到"//"则表示是本级目录,无需做任何操作。
         * 当遇到其他字符则表示是文件夹名,无需简化。
         * 当字符串是空或者遇到”/../”,则需要返回一个"/"。
         * 当遇见"/a//b",则需要简化为"/a/b"
         * 我的思路是先把所有的按照/分割开来
         * 当字符串不为"..",则将字符串入栈。
         * 当字符串为"..", 则弹栈(返回上级目录)
         * 最后使用StringBuilder进行拼接,由于String在每次对字符串修改时候均会生成一个新的String,
         * 效率较低,一般会采用StringBuilder或者StringBuffer来进行字符串修改的操作,
         * StringBuilder是StringBuffer的简易替换,是非线程安全的,而StringBuffer是线程安全的。
         */
        public String simplifyPath(String path) {
            if(path == null||path.length()==0)
                return path;      
            Stack<String> stack = new Stack<String>();
            String[] list = path.split("/");
            for(int i=0; i<list.length; i++){
                if(list[i].equals(".")||list[i].length()==0)
                    continue;
                else if(!list[i].equals(".."))
                    stack.push(list[i]);
                else{
                    if(!stack.isEmpty())
                        stack.pop();
                }
            }     
            StringBuilder res = new StringBuilder();   
            Stack<String> temp = new Stack<String>();
            while(!stack.isEmpty())  
                temp.push(stack.pop());     
            while(!temp.isEmpty())
                res.append("/"+temp.pop());      
            if(res.length()==0)
                res.append("/");  
            return res.toString();
        }
  • 相关阅读:
    【总结整理】javascript的函数在if中调用时是否加括号---与.net的不同之处
    【总结整理】javascript的函数调用时是否加括号
    【总结整理】JavaScript的DOM事件学习(慕课网)
    关于overflow:hidden (转)
    CSS
    HTML
    jQuery
    函数
    装饰器
    python的条件与循环1
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5480633.html
Copyright © 2011-2022 走看看