LeetCode刷题——简化路径#71#Medium

Posted 喷火龙与水箭龟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode刷题——简化路径#71#Medium相关的知识,希望对你有一定的参考价值。

简化路径的思路探讨与源码
     简化路径的题目如下图,该题属于栈和字符串类型的题目,主要考察对于栈本身的理解和字符串遍历技巧的使用。本文的题目作者想到2种方法,分别是双端队列方法和栈方法,其中双端队列方法使用Java进行编写,而栈方法使用Python进行编写,当然这可能不是最优的解法,还希望各位大佬给出更快的算法。

    本人认为该题目可以使用双端队列方法,首先初始化一个双端队列,并且将输入的字符串根据“斜杠”分割转化为数组,然后开始遍历数组,并且判断当前元素是否为空或者点,如果是就不操作;否则就判断当前元素是否为"..",如果是就继续判断双端队列是否不为空,如果满足就删除双端队列最后一个元素。否则就把元素添加到双端队列的尾部。遍历结束后,开始遍历双端队列,遍历取出队列头部的元素后拼接“斜杠”得到结果字符串,并且最后返回结果。那么按照这个思路我们的Java代码如下:

#喷火龙与水箭龟
class Solution {
    public String simplifyPath(String path) {
        Deque<String> doubleList = new LinkedList<>();
        String[] arr = path.split("/");
        for(int jr = 0; jr < arr.length; jr++){
            String word = arr[jr];
            if(word.equals("") || word.equals(".")){
                continue;
            }else if (word.equals("..")){
                if(! doubleList.isEmpty()){
                    doubleList.pollLast();
                }
            }else{
                doubleList.offer(word);
            }
        }
        StringBuilder resFinal = new StringBuilder("/");
        while(! doubleList.isEmpty()){
            resFinal.append(doubleList.poll());
            if(! doubleList.isEmpty()){
                resFinal.append("/");
            }
        }
        if(resFinal.toString().equals("")){
            return "/";
        }else{
            return resFinal.toString();
        }
    }
}


    显然,我们看到双端队列的效果不错,同时还可以使用栈方法进行处理。首先初始化一个列表作为栈,把字符串按照“斜杠”进行分割得到数组。然后开始遍历数组,如果栈不是空并且当前元素等于"..“那就把栈顶元素抛出,否则判断元素是否属于”.."如果是则插入到栈内,最后将栈转化为以“斜杠”分割的字符串并返回结果。所以按照这个思路就可以解决,下面是Python代码部分:

#喷火龙与水箭龟
class Solution:
    def simplifyPath(self, path):
        stackList = []
        arr = path.split('/')
        for jr in arr:
            if stackList and jr == '..':
                stackList.pop()
            elif jr not in " ..":
                stackList.append(jr)
        resFinal = '/' + '/'.join(stackList)
        return resFinal


    从结果来说Java版本的双端队列方法的效率不错,而Python版本的栈方法的速度也不错,但应该是有更多的方法可以进一步提速的,希望朋友们能够多多指教,非常感谢。

以上是关于LeetCode刷题——简化路径#71#Medium的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题模版:71 - 80

LeetCode 71~75

LeetCode:简化路径71

[leetcode] 71. 简化路径

LeetCode 71. 简化路径

leetcode 71 简化路径