题意:给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。
请注意,返回的 规范路径 必须遵循下述格式:
始终以斜杠 '/' 开头。
两个目录名之间必须只有一个斜杠 '/' 。
最后一个目录名(如果存在)不能 以 '/' 结尾。
此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '..')。
返回简化后得到的 规范路径 。
解法:
1.先以/分隔字符串,得到字符串数组,我们分析,字符串数据,可能存在如下几种类型的数据:. or .. or 目录字符串 or 空字符串
2.针对于空字符串和.,我们可以不用处理
3.遍历字符串数组,用队列来保存遍历的数据,如果遇到..
并且队首不为空,则移除队首元素,否则,如果不是上述其他字符,则入队尾
4.遍历队列,加上/
,输出字符串即可
解题遇到的问题
无
后续需要总结学习的知识点
无
##解法1
import java.util.ArrayDeque;
import java.util.Deque;
class Solution {
public String simplifyPath(String path) {
String[] cs = path.split("/");
Deque<String> deque = new ArrayDeque<String>();
for (int i = 0; i < cs.length; i++) {
if ("..".equals(cs[i])) {
if (!deque.isEmpty()) {
deque.pollLast();
}
} else if (cs[i].length() > 0 && !".".equals(cs[i])) {
deque.offerLast(cs[i]);
}
}
StringBuilder builder = new StringBuilder();
if (deque.isEmpty()) {
builder.append("/");
} else {
while (!deque.isEmpty()) {
builder.append("/" + deque.pollFirst());
}
}
return builder.toString();
}
}
网友评论