【leetcode의】 1233. 파일 시스템에서 하위 폴더를 제거

다음 내용은 다음과 같습니다

폴더 목록을 감안할 때, 해당 폴더의 모든 하위 폴더를 제거하고 제거한 후 임의의 순서로 폴더를 반환합니다.

A는 경우  folder[i] 다른 내에 위치하고 있으며  folder[j], 그것의 하위 폴더라고합니다.

경로의 형식은 형식의 하나 이상의 연결된 문자열입니다 :  / 하나 개 이상의 소문자 영문자 하였다. 예를 들어,  /leetcode 및  /leetcode/problems 빈 문자열 동안 유효한 경로는 다음과  / 없습니다.

예 1 :

입력 : 폴더 = '/ A ","/ A / B ","/ C / D ","/ C / D / E ","/ C / F "] 
출력 :'/ A", "/ C / D ","/ C / F "] 
설명 : 폴더"/ A / B / / A "및"/ C / D / E / C / D "에서"폴더 안에 ""의 하위 인 " 우리의 파일 시스템.

예 2 :

입력 : 폴더 = '/ A ","/ A / B / C ","/ A / B / D "] 
출력 :'/ A"] 
설명 : 폴더 "/ A / B / C"및 "/ A / B / D / / A ''가 하위의 때문에 제거 될 것이다. "

예 3 :

입력 : 폴더 = "/ A / B / C", "/ A / B / CA ','/ A / B / D"] 
출력 [ "/ A / B / C", "/ A / B / CA ','/ A / B / D "]

제약 :

  • 1 <= folder.length <= 4 * 10^4
  • 2 <= folder[i].length <= 100
  • folder[i] 소문자를 포함하고 '/'
  • folder[i] 항상 문자로 시작 '/'
  • 각 폴더 이름은 고유합니다.

문제 해결 아이디어 : 첫째, 사전 트리, 긴 분류에 단기의 요소에 의해 해당 폴더를 연 다음 폴더를 통과, 이미 사전 트리 요소에 접두사 일치 해. 폴더 [내가] 삭제 하위 디렉토리, 기타를 보여주는 사전 트리에있는 경우; 넣어하지 않을 경우 디렉토리 트리가 사전에 삽입됩니다.

다음과 같이 코드입니다 :

클래스 의 TreeNode (객체) :
     데프  __init__ (자기, 배) : 
        self.val = X 
        self.childDir = {} 
        self.isDir = 거짓 

클래스 트리는 (객체) : 
    DIC = {}
     데프  __init__ (자기) :
         "" " 
        초기화 여기에 데이터 구조. 
        "" " 
        self.root = TreeNode를 (없음) 
        self.dic = {} 

    데프 삽입 (자기, 워드) : 
        노드 = self.root
         에 대한한마디
             경우하지  node.childDir : 
                node.childDir [I]는 = TreeNode를 (ⅰ) 
            노드 = node.childDir [I] 
        node.isDir = 

    DEF isDelete (자기, DIR) 
        노드 = self.root
         위한 I DIR :
             만약 I 에서 node.childDir : 
                노드 = node.childDir [I]
                 의 경우 node.isDir == true를
                     반환사실
             다른 사람 :
                 반환 False를
         반환 거짓 

클래스 : 솔루션 (객체)
     데프 removeSubfolders (자기, 폴더) :
         "" " 
        : 유형 폴더 :리스트 [STR] 
        : RTYPE : 목록 [STR] 
        " "" 
        folder.sort (CMP = 람다 1 개 , X2 : LEN (X1) - LEN (X2)) 
        트라이 = 트리는 () 
        입술 = []
         에 대한 F 폴더 :
             만약 trie.isDelete (F) == 거짓 : 
                res.append (F)
                trie.insert (F  +' / ' )
         복귀 입술

 

추천

출처www.cnblogs.com/seyjs/p/11713643.html