标签:
/* * 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(); }
标签:
原文地址:http://www.cnblogs.com/zmyvszk/p/5480633.html