https://leetcode.cn/problems/simplify-path/description/?envType=study-plan-v2&envId=top-interview-150
思路:将串以/分割,判断字符串是…/./其他,进行入栈和出栈,最后留下的就是结果,拼装一下就好了。
三个要点:
第一:字符串的比较统一拿equals来比
第二:队列的遍历一定要拿while,不要用for,除非一开始就拿个变量存下来长度,不然遍历时候长度在变化
第三:split()函数会让空开的地方分割出来空字符串“”
举个栗子:
String s = " a b c";
String[] x = s.split(" ");
for(String unit:x)System.out.println(unit);
结果是
a
bc
代码:
class Solution {public String simplifyPath(String path) {String[] units = path.split("/");String ans="";Deque<String> queue = new LinkedList<>();for(int i=0;i<units.length;i++){//System.out.println(units[i]);if(units[i].equals("")||units[i].equals(".")) continue;else if(units[i].equals("..")&&queue.size()>0)queue.removeFirst();else if(units[i].equals("..")&&queue.size()==0) continue;elsequeue.addFirst(units[i]); }//千万别这么写// for(int i=0;i<queue.size();i++){// if(i>=1)ans+="/";// ans+=queue.peekFirst();// queue.removeFirst();// }List<String> list = new ArrayList<>();while(queue.size()!=0){list.add(queue.peekFirst());queue.removeFirst();}for(int i=list.size()-1;i>=0;i--){ans=ans+"/"+list.get(i);}if(ans.equals("")) ans = "/";return ans;}
}
PS:LinkedList的API