【4.10日题解】——字符串哈希

【4.10日题解】——字符串哈希,第1张

☘前言☘

今日份水题开始。


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

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


全文目录
  • ☘前言☘
  • 解题思路
  • 📑写在最后


P1540 [NOIP2010 提高组] 机器翻译

解题思路

随手写一个链式hash就好了,需要注意的是,内存,内存,内存!!!!c语言的精华就是内存管理,我就是个菜鸡。






记录字符串用于比较的时候一定要新开一端区域,不然的话就是错的!!!!

#include 
#include 
#include 

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/577910.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存