【4.10日题解】——字符串哈希(c代码表述)

请添加图片描述

☘前言☘

今日份水题开始。希望有想要提高的同学跟我们一起来刷题0.0
P3370 【模板】字符串哈希

🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人
✨联系方式:2201891280(QQ)
全文大约阅读时间: 20min



P1540 [NOIP2010 提高组] 机器翻译

解题思路

随手写一个链式hash就好了,需要注意的是,内存,内存,内存!!!!c语言的精华就是内存管理,我就是个菜鸡。。。记录字符串用于比较的时候一定要新开一端区域,不然的话就是错的!!!!

#include <cstdio>
#include <cstring>
#include <cstdlib>

const int maxn = 49999;
int count = 0;
struct node{
    char *s;
    node *next;
};
node * HashTable[maxn];
void HashInsert(char *str){
    int hashnum = 0,n = 0;
    for(int i = 0;str[i];++i){
        hashnum *= 128;
        hashnum += str[i];
        hashnum %= maxn;
        ++n;
    }
    node *p = HashTable[hashnum];
    while(p){
        if(strcmp(p->s,str) == 0)   return;
        p = p->next;
    }
    ++count;
    p = (node *)malloc(sizeof(node));//头插法
    char *tmp = (char *)malloc(sizeof(char) * (n + 1));
    memset(tmp,0,n+1);
    strcpy(tmp,str);
    p->s = tmp;
    p->next = HashTable[hashnum];
    HashTable[hashnum] = p;
    
}
int main(){
    int n;
    scanf("%d", &n);
    count = 0;
    memset(HashTable,0,sizeof(HashTable));
    while(n--){
        char s[1509];
        scanf("%s",s);
        HashInsert(s);
    }
    printf("%d\n",count);
    return 0;

}

在这里插入图片描述

📑写在最后

今天就这样,明日再见0.0打周赛了,力扣来不来0.0

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XingleiGao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值