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

简介: 【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;
}




相关文章
|
存储 C语言
C语言题目的多种解法分享 2之字符串左旋和补充题
C语言题目的多种解法分享 2之字符串左旋和补充题
76 0
|
5月前
|
人工智能 算法 BI
【洛谷 P1803】凌乱的yyy _ 线段覆盖 题解(贪心算法+结构体排序)
**线段覆盖问题**: YYY 想在 NOIP 前参加最多比赛。给定 $n$ 场比赛的开始和结束时间,每场比赛必须连续且不能冲突。输入包含每场比赛的时间段,输出最多可参加的比赛数。$20\%$ 数据 $n\leq10$,$50\%$ 数据 $n\leq10^3$,$100\%$ 数据 $n\leq10^6$。解决方案:按结束时间排序比赛,若当前比赛开始时间晚于上一个结束时间,则计数加一。样例输入:3 场比赛,输出:2。AC C++ 代码实现了此算法。
38 0
|
算法 程序员 C语言
全排列思路解析附C语言实现
全排列思路解析附C语言实现
|
算法 搜索推荐 C语言
初阶算法(3):二分法的讲解与实现(C语言),以及二分不止光在有序数组中的应用
初阶算法(3):二分法的讲解与实现(C语言),以及二分不止光在有序数组中的应用
198 0
|
存储 C语言
C语言题解——倒置字符串(剑指Offer 第58题)
C语言题解——倒置字符串(剑指Offer 第58题)
95 0
C语言题解——倒置字符串(剑指Offer 第58题)
|
C语言
C语言题解:经典递归题目(斐波那契数列、汉罗塔问题以及青蛙跳台阶问题)
C语言题解:经典递归题目(斐波那契数列、汉罗塔问题以及青蛙跳台阶问题)
156 0
C语言题解:经典递归题目(斐波那契数列、汉罗塔问题以及青蛙跳台阶问题)
|
机器学习/深度学习 算法 C++
(C/C++)STL函数(3)二分算法题以及二分模板 和(蓝桥杯)递推与递归题目及解法(ACwing)
(C/C++)STL函数(3)二分算法题以及二分模板 和(蓝桥杯)递推与递归题目及解法(ACwing)
(C/C++)STL函数(3)二分算法题以及二分模板 和(蓝桥杯)递推与递归题目及解法(ACwing)
C语言(冒泡排序思想及代码实现)(分别用递归和非递归实现斐波拉系数)(数组)(函数)
C语言(冒泡排序思想及代码实现)(分别用递归和非递归实现斐波拉系数)(数组)(函数)
C语言(冒泡排序思想及代码实现)(分别用递归和非递归实现斐波拉系数)(数组)(函数)
|
C语言
C语言的三个经典题目:三步翻转法、杨氏矩阵、辗转相除法
C语言的三个经典题目:三步翻转法、杨氏矩阵、辗转相除法
143 0
C语言的三个经典题目:三步翻转法、杨氏矩阵、辗转相除法