Python, C++, JavaScript, SQL 및 TypeScript의 다양한 LeetCode 솔루션을 살펴보세요. 여러 프로그래밍 언어로 인터뷰 준비, 학습 및 코드 연습에 적합합니다. Github 레포 링크
문자열이 주어지면 에스
그리고 문자열 사전 단어사전
, 반품 진실
만약에 에스
공백으로 구분된 하나 이상의 사전 단어 시퀀스로 분할될 수 있습니다.
메모 사전에 있는 동일한 단어가 분할에서 여러 번 재사용될 수 있습니다.
예시 1:
입력: s = "leetcode", wordDict = ["leet","코드"] 산출: 진실 설명: "leetcode"는 "leet code"로 분할될 수 있으므로 true를 반환합니다.
예 2:
입력: s = "applepenapple", wordDict = ["사과","펜"] 산출: 진실 설명: "applepenapple"은 "apple pen apple"로 분할될 수 있으므로 true를 반환합니다. 사전 단어를 재사용할 수 있습니다.
예시 3:
입력: s = "catsandog", wordDict = ["고양이","개","모래","그리고","고양이"] 산출: 거짓
제약:
1 <= s.길이 <= 300
1 <= wordDict.length <= 1000
1 <= wordDict[i].length <= 20
에스
그리고단어사전[i]
영문 소문자로만 구성됩니다.- 모든 문자열은
단어사전
~이다 고유한.
파이썬
#는 # 시간 복잡도를 시도합니다: O(n^2 + m*k) # 공간 복잡도: O(n + m*k) 입력에서 가져오기 목록 클래스 TrieNode: def __init__(self): self.isWord = False self.children = {} 클래스 해결책: def wordBreak(self, s: str, wordDict: List[str]) -> bool: root = TrieNode() for word in wordDict: curr = root for c in word: if c가 curr.children에 없음 : curr.children[c] = TrieNode() curr = curr.children[c] curr.isWord = True dp = [False] * len(s) for i in range(len(s)): if i == 0 또는 dp[i-1]: curr = root for j in range(i, len(s)): c = s[j] if c가 curr.children에 없으면 break curr = curr.children[c] if curr. isWord: dp[j] = True return dp[-1] # DP 2 # 시간 복잡도: O(n^3 +m*k) # 공간 복잡도: O(n+m*k) 입력에서 # import List # 클래스 해결책: # def wordBreak(self, s: str, wordDict: List[str]) -> bool: # sLen = len(s) # 단어 = set(wordDict) # dp = [False] * (sLen + 1) # dp[0] = True # for i in range(1, sLen + 1): # for j in range(i): # if dp[j] 및 s[j:i] in word: # dp[i] = 참 # 중단 # 반환 참 # DP 1 # 시간 복잡도: O(n*m*k) # 공간 복잡도: O(n) # # from 타이핑 가져오기 목록 # 클래스 해결책: # def wordBreak(self, s: str, wordDict : List[str]) -> bool: # sLen = len(s) # dp = [False] * sLen # for i in range(sLen): # for word in wordDict: # wordLen = len(word) # if i < wordLen - 1: # 계속 # if i == wordLen - 1 또는 dp[i-wordLen]: # if s[i-wordLen+1:i + 1] == word: # dp[i] = True # 중단 # print(dp) # return dp[sLen-1] # BFS # 시간 복잡도: O(n^3 + m*k) # 공간 복잡도: O(n+m*k) # # 컬렉션에서 import deque # 타이핑에서 import List # 클래스 솔루션: # def wordBreak(self, s: str, wordDict: List[str]) -> bool: # 단어 = set(wordDict) # 대기열 = deque([0]) # visible = set() # while queue: # start = queue.popleft() # if start == len(s): # return True # for end in range(start + 1, len(s) + 1): # if end in see: # continue # if s[start:end] 단어: # queue.append(end) # see.add(end) # return False S = "applepenapple" WordDict = ["apple", "pen"] print(Solution(). wordBreak(S, WordDict))