[LeetCode] 71 단순화 경로

단순화 된 경로. 질문의 의미를 단순화하면, 유닉스 환경에서 절대 경로를 제공하는 것이다. 예,

예 1 :
입력 : "/ 홈 /"
출력 : "/ 홈"
설명 : 마지막 디렉토리 이름 뒤에 후행 슬래시가없는 것으로 도시.

예 2 :
입력 : "/../"
출력 : "/"
설명 : 루트 수준은 당신이 갈 수있는 가장 높은 수준이기 때문에 루트 디렉토리에서 한 단계 올라가고는, 조작은 행해지 지 않습니다.

예 3 :
입력 : "/ 홈 // foo는 /"
출력 : "/ 홈 / foo는"
설명 : 정식 경로에서 여러 개의 연속 슬래시가 하나 하나에 의해 대체된다.

예 4 :
입력 : "/a/./b/../../c/"
출력 : "/ C"

예 5 :
입력 : "/a/../../b/../c//.//"
출력 : "/ C"

예 6 :
입력 : "/a//b////c/d//./.// .."
출력 : "/ A / B / C"

매우 간단하다의 잘못된 입력의 경우를 고려하는 것은 생각 할 필요는 없습니다, 그것은 스택 스택을 사용합니다. 아이디어는 작은 부분에 '/'로 입력 된 후 스택에 각 부분의 필요 여부를 판정한다. (.), 그렇지 않으면 스택에 일반 지점과 빈 문자열 ( '') 두 점 (..)을 발생 넣어 발생하기 전에 만 유지하지만 꺼내기에 넣어 일부가 아닙니다. 그 후, 출력 스트링으로 함께 스택의 최종 요소.

시간 O (N)

공간 O (N)

1  / * *
 2  * @param {} 문자열로
 3  * @return 문자열} {
 4   * / 
5  VAR simplifyPath = 함수 (경로) {
 6      하자 스택 = [];
7      경로 path.split = ( '/' );
8       (나는 <path.length, I = 0을 보자 I ++ ) {
 9          경우 ( '.'로 [I] == || 경로 [I] == '') 계속 ;
10          의 경우 (경로 [I] == '..' ) {
 11              stack.pop ();
12          } 다른 {
 13             stack.push (경로 [I]);
14          }
 15      }
 16       '/'+ stack.join ( '/' );
17 };

 

추천

출처www.cnblogs.com/aaronliu1991/p/12302063.html