스테이 버튼 71-- 간략화 경로

원래 제목

유닉스 스타일의 파일은 당신이 그것을 단순화 할 필요가 절대 경로를 제공합니다. 아니면 즉, 경로 지정으로 변환합니다.

(.), 두 개의 점 (...)은 (상위 디렉토리) 디렉토리를 나타내고, 또한 비교적 복잡한 경로 일 수있다 둘 유닉스 - 스타일의 파일 시스템에서, 도트는 현재 디렉토리 자체를 나타낸다 부분. 자세한 내용은 다음을 참조하십시오 상대 경로 대 리눅스 / 유닉스 절대 경로를

사양은 / 항상 처음에 / 슬래시로 경로를 반환해야하며, 두 개의 슬래시 사이에 하나의 디렉토리 이름을 가지고 있어야합니다. (있을 경우) 마지막으로, 디렉토리 이름이 /로 끝나지. 또한, 본 명세서는 최단 경로가 절대 경로 문자열이어야 나타낸다.

예 1 :

输入:"/home/"
输出:"/home"
解释:注意,最后一个目录名后面没有斜杠。

예 2 :

输入:"/../"
输出:"/"
解释:从根目录向上一级是不可行的,因为根是你可以到达的最高级。

예 3 :

输入:"/home//foo/"
输出:"/home/foo"
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。

예 4 :

输入:"/a/./b/../../c/"
输出:"/c"

예 5 :

输入:"/a/../../b/../c//.//"
输出:"/c"

예 6 :

输入:"/a//b////c/d//././/.."
输出:"/a/b/c"

原题URL : https://leetcode-cn.com/problems/simplify-path/

해결

그것을보고 어려운 일이 아니다, 그러나 때문에 나는 그것을 시작하는 것은 불가능했다 시작 시간을 얻었다.

스택을 사용하여

참조 ..다시 생각하는 것이 특히 쉽게 그것의 논리를, 그리고해야 다시 가장 편리한 데이터 구조를 기록하는 것은 최대. 으로 .콘텐츠에 상상할 수있는 무시 될 수 있지만, /그것은 구분 기호로 사용할 수 있으며 코드를 보면 :

class Solution {
    public String simplifyPath(String path) {
        // 存储路径
        Stack<String> stack = new Stack<>();
                
                // 分隔
        String[] array = path.split("/");
        for (String str : array) {
                        // 忽略
            if (str.equals("") || str.equals(".")) {
                continue;
            }
                        
                        // 后退
            if (str.equals("..")) {
                stack.pop();
                continue;
            }
                        
                        // 需要存储的内容
            stack.push(str);
        }

        StringBuilder sb = new StringBuilder();
        for (String str : stack) {
            sb.append("/").append(str);
        }
                // 如果内容为空,则需要输出"/"
        if (sb.length() == 0) {
            sb.append("/");
        }
        return sb.toString();
    }
}

제출을 주어진 후에 그것은 아주 좋은 보인다. 그는 말했다 stack.push(str);,이 라인은 예외를 throw java.util.EmptyStackException스택이 비어 있거나 여전히 (그것이 전반적인 문제를 생각하지 보인다)의 상단 수준에서 필요한 경우, 실제로. 우리는 아래의 코드를 최적화 할 수 있습니다 :

class Solution {
    public String simplifyPath(String path) {
        // 存储路径
        Stack<String> stack = new Stack<>();
                
                // 分隔
        String[] array = path.split("/");
        for (String str : array) {
                        // 忽略
            if (str.equals("") || str.equals(".")) {
                continue;
            }
                        
                        // 后退
            if (str.equals("..")) {
                            // 判断是否为空,不为空,才需要回退
                if (!stack.empty()) {
                    stack.pop();
                }
                                // 无论stack空不空,都需要结束
                continue;
            }

            stack.push(str);
        }

        StringBuilder sb = new StringBuilder();
        for (String str : stack) {
            sb.append("/").append(str);
        }
        if (sb.length() == 0) {
            sb.append("/");
        }
        return sb.toString();
    }
}

:에 의해 실행될 때 OK, 그것은 통과 6ms메모리 36.2MB소비 : .

개요

당신이 이해하면이 질문에 내 대답 과정 위에, 나는 모른다. 이러한 모든 문제 해결 과정을 채울 수 있도록 브러시, 주제의 번호를 가지고 전에 때문에, 같은도 검토했다. 나는 그런 인터뷰는 주로 주제 기반으로 주요 외국 기업을 생각, 그것은 어렵지 않을 것이다, 제목이 매체를 선택 브러시, 주제는 정말 동기 부여, 너무 열심히 생각할 필요를 느낄 브러시. 우리는 당신과 함께 진행을 함께 할 수 있도록 노력하겠습니다.

공공의 수, 헤드 라인 번호를 내 블로그를 방문하거나 나를 따라 할 수 관심이, 어쩌면 놀라움있을 것입니다.

https://death00.github.io/

공개 번호 : 지안 쳉 도로

추천

출처www.cnblogs.com/death00/p/12081292.html