290. Word Pattern
Given a pattern
and a string s
, find if s
follows the same pattern.
Here follow means a full match, such that there is a bijection between a letter in pattern
and a non-empty word in s
.
Solution:
class Solution:
def wordPattern(self, pattern, s):
d = {}
t = s.split(" ")
if len(pattern) != len(t):
return False
if len(set(pattern)) != len(set(t)):
return False
for i in range(len(t)):
if t[i] not in d:
d[t[i]] = pattern[i]
elif d[t[i]] != pattern[i]:
return False
return True
Feedback:
Runtime: 37 ms, faster than 68.53% of Python3 online submissions for Word Pattern.
Memory Usage: 14 MB, less than 69.13% of Python3 online submissions for Word Pattern.
763. Partition Labels
You are given a string s
. We want to partition the string into as many parts as possible so that each letter appears in at most one part.
Note that the partition is done so that after concatenating all the parts in order, the resultant string should be s
.
Return a list of integers representing the size of these parts.
Solution:
class Solution:
def partitionLabels(self, s):
resource = {c:i for i, c in enumerate(s)}
left, right = 0, 0
result = []
for i, letter in enumerate(s):
right = max(right, resource[letter])
if i == right:
result += [right - left + 1]
left = i + 1
return result
Remark: Two pointer method.
Feedback:
Runtime: 71 ms, faster than 28.21% of Python3 online submissions for Partition Labels.
Memory Usage: 13.8 MB, less than 82.82% of Python3 online submissions for Partition Labels.
To be continued... : )