Skip to content

Commit 22fde5e

Browse files
committed
Sync LeetCode submission Runtime - 215 ms (39.83%), Memory - 16.8 MB (66.10%)
1 parent db44503 commit 22fde5e

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<p>You are given a <strong>0-indexed</strong> string <code>s</code> and a dictionary of words <code>dictionary</code>. You have to break <code>s</code> into one or more <strong>non-overlapping</strong> substrings such that each substring is present in <code>dictionary</code>. There may be some <strong>extra characters</strong> in <code>s</code> which are not present in any of the substrings.</p>
2+
3+
<p>Return <em>the <strong>minimum</strong> number of extra characters left over if you break up </em><code>s</code><em> optimally.</em></p>
4+
5+
<p>&nbsp;</p>
6+
<p><strong class="example">Example 1:</strong></p>
7+
8+
<pre>
9+
<strong>Input:</strong> s = &quot;leetscode&quot;, dictionary = [&quot;leet&quot;,&quot;code&quot;,&quot;leetcode&quot;]
10+
<strong>Output:</strong> 1
11+
<strong>Explanation:</strong> We can break s in two substrings: &quot;leet&quot; from index 0 to 3 and &quot;code&quot; from index 5 to 8. There is only 1 unused character (at index 4), so we return 1.
12+
13+
</pre>
14+
15+
<p><strong class="example">Example 2:</strong></p>
16+
17+
<pre>
18+
<strong>Input:</strong> s = &quot;sayhelloworld&quot;, dictionary = [&quot;hello&quot;,&quot;world&quot;]
19+
<strong>Output:</strong> 3
20+
<strong>Explanation:</strong> We can break s in two substrings: &quot;hello&quot; from index 3 to 7 and &quot;world&quot; from index 8 to 12. The characters at indices 0, 1, 2 are not used in any substring and thus are considered as extra characters. Hence, we return 3.
21+
</pre>
22+
23+
<p>&nbsp;</p>
24+
<p><strong>Constraints:</strong></p>
25+
26+
<ul>
27+
<li><code>1 &lt;= s.length &lt;= 50</code></li>
28+
<li><code>1 &lt;= dictionary.length &lt;= 50</code></li>
29+
<li><code>1 &lt;= dictionary[i].length &lt;= 50</code></li>
30+
<li><code>dictionary[i]</code>&nbsp;and <code>s</code> consists of only lowercase English letters</li>
31+
<li><code>dictionary</code> contains distinct words</li>
32+
</ul>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Approach 1: Top Down Dynamic Programming with Substring Method
2+
3+
# Time: O(N^3)
4+
5+
class Solution:
6+
def minExtraChar(self, s: str, dictionary: List[str]) -> int:
7+
n, dict_set = len(s), set(dictionary)
8+
9+
@cache
10+
def dp(start):
11+
if start == n:
12+
return 0
13+
14+
ans = dp(start + 1) + 1
15+
for end in range(start, n):
16+
curr = s[start : end + 1]
17+
if curr in dict_set:
18+
ans = min(ans, dp(end + 1))
19+
20+
return ans
21+
22+
return dp(0)
23+

0 commit comments

Comments
 (0)