Description:
你是一位矿主,收集了一批石头,这批石头中有宝石也有普通的石头,给定一个宝石的列表,计算这批石头中的宝石数目。要求使用size不超过10的hash表来完成此项任务。特殊字符(!@#$%^&*)和字母均可使用唯一的ascii码表示,请同学们查阅ascii码的原理,表示方式以及与int类型的相互转换方式。使用线性探测法解决冲突。
Solution:
# Filename : hashTableToJudgeGem.py
class hashTable():
"""docstring for hashT"""
def __init__(self ,size):
self.table = [None] * size
self.size=size
# 使用线性探测法插入
def insert(self ,value):
value = ord(value)
index = value % self.size
# print('value:',value,' self.table[index]:',self.table[index])
if self.table[index] == None:
self.table[index] = value
return True
else:
if None not in self.table[index:]:
end = self.table[:index].index(None)
if (value in self.table[index:]) or (value in self.table[:end]) :
return False
else:
self.table[end] = value
else:
end = self.table[index:].index(None)
if value in self.table[index:(end + index)]:
return False
else:
self.table[index+end] = value
def search(self,value):
value = ord(value)
index = value % self.size
# print('value:',value,' self.table[index]:',self.table[index])
if self.table[index] == None:
return False
else:
while self.table[index] != None:
if self.table[index] == value:
return True
else:
index += 1
if index == len(self.table):
index = 0
self.size = 10
table = hashTable(self.size)
inputGem = str(input())
for eachGem in inputGem:
table.insert(eachGem)
#print('table element:',table.table)
GemNum = 0
SearchIt = str(input())
for eachsearch in SearchIt:
if(table.search(eachsearch)):
GemNum += 1
print(GemNum)