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();
        }
  • 相关阅读:
    NFS4.1规范研究:session
    散列冲突与作为特征值的散列
    使用Select的3个注意事项
    3个学习Socket编程的简单例子:TCP Server/Client, Select
    Gdb调试多进程程序
    Usage of pmake
    诡异的bug: tcsh陷入死循环
    【转】PowerDesigner 物理数据模型(PDM) 说明
    大批量文件处理的7条建议
    OLE DB、ODBC 和 Oracle 连接池 (ADO.NET)
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5480633.html
Copyright © 2011-2022 走看看