当前位置:网站首页>简化路径(力扣71)

简化路径(力扣71)

2022-04-23 18:47:00 小钦不掉发

Deque,Queue,stack简单了解

Deque实现一个双端队列,Queue先进先出

Queue Deque
添加元素到队尾 add()/offer() addLast()/offerLast()
取队首元素并删除 remove()/poll() removeFirst()/pollFirst()
取队首元素但不删除 element()/peek() getFirst()/peekFirst()

 stack(栈,原则为先进后出,后进先出)常用方法:

①push()入栈

②top()获得栈顶元素

③pop()弹出栈顶元素

④empty()可以检测stack内是否为空,返回true为空,返回false为非空

⑥size()返回stack内元素的个数

简化路径

给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。

在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。

请注意,返回的 规范路径 必须遵循下述格式:

始终以斜杠 '/' 开头。
两个目录名之间必须只有一个斜杠 '/' 。
最后一个目录名(如果存在)不能 以 '/' 结尾。
此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '..')。
返回简化后得到的 规范路径 。

 

 

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String path = sc.next();
		simplifyPath(path);
	}

	public static String simplifyPath(String path) {
		String[] str = path.split("/");// 根据"/"将路径分割成数组
		Deque<String> deque = new ArrayDeque<String>();
		for (String string : str) {
			if (string.equals("..")) {// ".."切换到上一级目录,因此需要删掉一层路径
				if (!string.isEmpty()) {
					deque.pollLast(); // 此处即为删掉一层路径
				}
			} else if (string.length() > 0 && !".".equals(string)) {// 即数组的当前元素长度大于0,且不为"."
				deque.offerLast(string);// 就将当前元素添加到ArrayDeque队尾
			}
		}
		StringBuffer sbf = new StringBuffer();
		if (deque.isEmpty()) {
			sbf.append("/");
		} else {
			while (!deque.isEmpty()) {
				sbf.append("/");
				sbf.append(deque.pollFirst());
			}
		}
		System.out.println(sbf.toString());
		return sbf.toString();
	}
}

浅浅的吧deque.isEmpty()改成了deque==null,全部改成类似这种就会超出内存,so还是多用isEmpty()吧!

吐槽 :厉害的人看着题目,菜的人看着题解,我这种菜中菜的看着题解还得搜一下Deque咋用!!!先打一遍理解,然后理解之后再打一遍

 

版权声明
本文为[小钦不掉发]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_63897791/article/details/124366020