Skip to content

Commit f143fb4

Browse files
committed
word break solution
1 parent 6dd411d commit f143fb4

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

word-break/parkhojeong.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Solution:
2+
def wordBreak(self, s: str, wordDict: List[str]) -> bool:
3+
first_letter_dict = {}
4+
for word in wordDict:
5+
first_letter_dict.setdefault(word[0], []).append(word)
6+
7+
last_letter_dict = {}
8+
for word in wordDict:
9+
last_letter_dict.setdefault(word[-1], []).append(word)
10+
11+
for word in wordDict:
12+
isSuccess = True
13+
for small_s in s.split(word):
14+
if small_s == "":
15+
continue
16+
if not self.dfs(small_s, 0, first_letter_dict, last_letter_dict):
17+
isSuccess = False
18+
19+
if isSuccess:
20+
return True
21+
22+
return False
23+
24+
def dfs(self, s: str, i, first_letter_dict, last_letter_dict):
25+
if i == len(s):
26+
return True
27+
28+
if s[i] not in first_letter_dict or s[-1] not in last_letter_dict:
29+
return False
30+
31+
for word in first_letter_dict[s[i]]:
32+
if not s[i:].startswith(word):
33+
continue
34+
35+
if self.dfs(s, i + len(word), first_letter_dict, last_letter_dict):
36+
return True
37+
38+
return False

0 commit comments

Comments
 (0)