LintCode 简化路径题目分析代码

题目

给定一个文档(Unix-style)的完全路径,请进行路径简化。

样例 "/home/", => "/home"

"/a/./b/../../c/", => "/c"

分析

思路比较简单,遇到..就回到上一级,遇到.或者空就不处理。 我们使用一个队列来处理,同时将三个需要特殊处理的字符存到一个set里面

代码

public class Solution {
    /**
     * @param path the original path
     * @return the simplified path
     */
    public String simplifyPath(String path) {
        Deque<String> queue = new LinkedList<String>();
        Set<String> skip = new HashSet<String>(Arrays.asList("..",".",""));
        
        for(String dir : path.split("/")) {
            if(dir.equals("..") && !queue.isEmpty()) 
                queue.pop();
            else if(!skip.contains(dir))
                queue.push(dir);
        }
        
        String res = "";
        for(String dir : queue)
            res = "/" + dir + res;
        
        return res.isEmpty() ? "/" : res;
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python读书笔记

《python算法教程》Day8 - 构建二分搜索树二分搜索树介绍二分搜索树创建代码

今天是《python算法教程》的第8篇读书笔记,笔记的主要内容是构建二分搜索树。 二分搜索树介绍 若要对一组有序值中执行操作(如查找),二分搜索法是一个优秀的选...

389130
来自专栏desperate633

设计模式之访问者模式(visitor模式)引入访问者模式visitor模式的实例visitor模式分析

Visitor是访问者的意思。 数据结构中保存着元素。一般我们需要对元素进行处理,那么处理元素的代码放在哪里呢?最显然的方法就是放在数据结构的类中,在类中添加...

9330
来自专栏java 成神之路

ConcurrentHashMap 原理解析(JDK1.8)

34770
来自专栏IMWeb前端团队

JS中的非可变性

非可变性是函数式编程的一个核心规则,对于面向对象编程也有很多用处。本文为参考sitepoint(参考链接1)中的文章后所记录的一些主要内容。 参考链接1:...

19550
来自专栏一枝花算不算浪漫

Java中常见数据结构Set之HashSet

33160
来自专栏编程之旅

线性表的顺序存储结构

举个简单的例子,蔺老师在给九班学生安排座位之前,会让学生们从矮到高按照身高的高矮升序排列,假如蔺老师的班上只有十个学生,而全班共有50个座位,那蔺老师会把这10...

19020
来自专栏李家的小酒馆

二叉树的层次遍历

二叉树的层次遍历 基本思想 借助队列来实现 首先初始化队列.然后将根结点压入队列 然后出队,输出出队元素的值, 如果存在左孩子.则左孩子入队 如果存在右孩子,则...

22900
来自专栏coolblog.xyz技术专栏

LinkedList 源码分析(JDK 1.8)

LinkedList 是 Java 集合框架中一个重要的实现,其底层采用的双向链表结构。和 ArrayList 一样,LinkedList 也支持空值和重复值。...

46370
来自专栏mySoul

java队列

队列为特殊的线性表,队列的特点先进先出(FIFO),队列插入为入队,队列删除为出对。

29800
来自专栏从流域到海域

《笨办法学Python》 第9课手记

《笨办法学Python》 第9课手记 这节课终于有一点新内容了,新内容也蛮容易理解的。 原代码如下: # Here's some new stuff, reme...

226100

扫码关注云+社区

领取腾讯云代金券