我试图解决hackerrank.com的这个问题。 https://www.hackerrank.com/challenges/contacts
但是如果我试图创建一个只有一个空dict()作为数据成员的类,那么我就会出现分段错误错误(测试用例3,4,7,8,12,13)。
Here是我的代码。
解决方案1
class trie:
def __init__(self):
self.children = {}
root = [trie(),0]
fixed_root = root
def add(root, word,level):
if level < word.__len__():
if word[level] not in root[0].children.iterkeys():
root[0].children[word[level]] = [trie(),0]
root[0].children[word[level]][1] = root[0].children[word[level]][1]+1
add(root[0].children[word[level]], word, level+1)
else:
root[0].children[word[level]][1] = root[0].children[word[level]][1]+1
add(root[0].children[word[level]],word, level+1)
else:
root[0].children['/'] = None
def frequency_prefix(root, word, level):
while level< word.__len__():
if word[level] in root[0].children.iterkeys():
root = root[0].children[word[level]]
level +=1
else:
return 'not_found'
return root
def stored_count(root):
return root[1]
def find(root, word, level):
f_p = frequency_prefix(root, word, level)
if f_p == 'not_found':
return 0
else:
return stored_count(f_p)
N = int(raw_input().strip())
for testcase in xrange(N):
fun, word = map(str, raw_input().strip().split(' '))
if fun == 'add':
add(fixed_root, word, 0)
if fun == 'find':
print find(fixed_root, word, 0)
如果我尝试在IDE中运行它,则不会出现错误。 我成功地解决了这个挑战。 Here是可接受的解决方案。我在这个版本的解决方案中没有使用任何课程。
解决方案2
root = [{},0]
fixed_root = root
def add(root, word,level):
if level < word.__len__():
if word[level] not in root[0].iterkeys():
root[0][word[level]] = [{},0]
root[0][word[level]][1] = root[0][word[level]][1]+1
add(root[0][word[level]], word, level+1)
else:
root[0][word[level]][1] = root[0][word[level]][1]+1
add(root[0][word[level]],word, level+1)
else:
root[0]['/'] = None
def frequency_prefix(root, word, level):
while level< word.__len__():
if word[level] in root[0].iterkeys():
root = root[0][word[level]]
level +=1
else:
return 'not_found'
return root
def stored_count(root):
return root[1]
def find(root, word, level):
f_p = frequency_prefix(root, word, level)
if f_p == 'not_found':
return 0
else:
return stored_count(f_p)
N = int(raw_input().strip())
for testcase in xrange(N):
fun, word = map(str, raw_input().strip().split(' '))
if fun == 'add':
add(fixed_root, word, 0)
if fun == 'find':
print find(fixed_root, word, 0)
问题
1)我不明白为什么我在解决方案1中遇到分段错误错误。我在两个解决方案中使用相同的内存。我是python的新手,所以我想我错过了一些关于python内存管理的东西。