단순화 된 경로. 질문의 의미를 단순화하면, 유닉스 환경에서 절대 경로를 제공하는 것이다. 예,
예 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 };