【数据结构】哈希应用——宝石计数

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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值