到目前为止,这是我的代码。我有一个如下列表启动,其长度为3。目标是返回最长列表的长度,该长度与self.nums
相同的公共前缀。
self.nums = ['1', '2', '3']
ourPrefixLen = len(self.nums) # outputs 3
dict_of_prefixes = {} # to be populated
for url, list_blocks in chains.items():
print("URL - ")
print(url)
print("list_blocks - ")
print(list_blocks)
for i in range(ourPrefixLen):
print('i - ')
print(i)
print("self.nums[i] - ")
print(self.nums[i])
print("list_blocks[i] - ")
print(list_blocks[i])
if self.nums[i] != list_blocks[i]:
print("BREAK")
break
print("NOOO")
dict_of_prefixes[url] = list_blocks
print("HERE")
length = 0
longest = ""
for url, chain in dict_of_prefixes.items():
if len(chain) > length:
length = len(chain)
longest = url
return longest
chains
是字典。这是我失败的测试用例:
chains = {'a':['1', '2', '3'], 'b':['1','2','3'], 'c':['1','3','4','5']}
结果应为3(最长链的长度与self.nums
具有相同的公共前缀,但是我得到的4不正确(c
的长度),所以我的代码仍然是即使将c
添加到dict_of_prefixes
包括所有这些打印语句,这是相关的输出:
URL -
c
list_blocks -
['1', '3', '4', '5']
self.nums[i] -
1
list_blocks[i] -
1
self.nums[i] -
2
list_blocks[i] -
3
BREAK
HERE
因此,这表明它正在输入Break语句大小写,并且没有将c
添加到dict_of_prefixes
中。那么,为什么c
仍被添加到dict_of_prefixes中呢?
答案 0 :(得分:1)
这是因为您如何遍历并将所有sublist
匹配项添加到dict_of_prefixes
。您所缺少的是当匹配self.num
时何时实际添加列表的逻辑。
考虑以下代码段,我们仅在is_match
保持True
的情况下添加一些内容,否则我们会中断甚至不考虑(为简单起见,我删除了print
s个)
...
is_match = True # Assume that this sublist is a match
for i in range(ourPrefixLen):
if self.nums[i] != list_blocks[i]:
is_match = False
break
if is_match:
dict_of_prefixes[url] = list_blocks
...