290、单词规律
这小破题要考虑到
(1)pattern和str大小不一致
(2)一对多
(3)多对一
class Solution(object):
def wordPattern(self, pattern, s):
"""
:type pattern: str
:type s: str
:rtype: bool
"""
y = s.split(' ')
if len(pattern)!=len(y):
return False
dict_xy = {}
for i in range(len(pattern)):
if pattern[i] not in dict_xy.keys():
dict_xy[pattern[i]] = y[i]
else:
if dict_xy[pattern[i]]!=y[i]:
return False
value = list(dict_xy.values())
value_i = len(value)
value_j = len(list(set(value)))
return value_j==value_i
把str通过‘ ’分开:
y = s.split(’ ')
763、划分字母区间
这题还是非常简单的,其实就是之前说的区间,找到两个完全不包含的区间就可以了哟~
上代码
class Solution(object):
def partitionLabels(self, s):
"""
:type s: str
:rtype: List[int]
"""
dict_v = {}
v = []
for i in range(len(s)):
if s[i] not in dict_v.keys():
k = []
k.append(i)
dict_v[s[i]] = k
v.append(s[i])
else:
dict_v[s[i]].append(i)
h = 0 #abcdefghijkl
# {b:[1,3,5]}
start = 0
end = 0
result = []
num = 0
while h<=len(v):
if h == len(v):
result.append(end - start + 1)
else:
if dict_v[v[h]][0]>end:
result.append(end - start+1)
end = dict_v[v[h]][-1]
start = dict_v[v[h]][0]
else:
start = min(dict_v[v[h]][0],start)
end = max(dict_v[v[h]][-1],end)#8#5
h = h+1
return result
加一句题外话 set(list())是无序的!