首页 > 其他分享 >字符串散列表暂存

字符串散列表暂存

时间:2024-10-30 21:42:16浏览次数:1  
标签:temp int s1 ret 列表 break ++ 字符串 暂存

#include<iostream>
#include<string>
using namespace std;
const int N = 10010;
//A 65 --- 0
int a[N];

string v[510];
 int Hash(const int* Key, int TableSize)
{
	 unsigned long int h = 0;
	for (int i = 0; i < 3; i++)
	{
		h = (h << 5) + Key[i];
	}
	return h % TableSize;
}
 int index = 0;

int main() {
	int n, p;
	cin >> n >> p;

	bool flag = true;
	while (n--)
	{
		
		string s1, s2;
		cin >> s1;
		bool m = true;
		for (int i = 0; i < index; i++)
		{
			if (v[i] == s1) m = false;
			break;
		}
		
		
		s2 = s1.substr(s1.size() - 3);


		int* str;
		str = (int*)malloc(sizeof(int) * 3);
		for (int i = 0; i < 3; i++)
		{
			str[i] = s2[i] - 65; 
		}
		unsigned long int ret = 0;

		ret = Hash(str, p);
		

		if (m==true)
		{
			v[index++] = s1;
			//进行平方探测
			int i = 0;
			unsigned long int temp = ret;
			while (a[ret] == 1) {
				i++;
				ret = (temp + i * i) % p; // 平方探测公式
				if (a[ret] == 0)
				{
					break;
				}

				ret = (temp - i * i + p) % p; // 确保索引为正
				if (a[ret] == 0)
				{
					break;
				}
				if (i >= p) {
					break; // 防止无限循环
				}
				ret = temp;
			}
			a[ret] = 1;
		}

		a[ret] = 1;
		if (flag)
		{
			cout << ret;
			flag = false;
		}
		else
		{
			cout << ' ' << ret;
		}
	}

}

标签:temp,int,s1,ret,列表,break,++,字符串,暂存
From: https://www.cnblogs.com/szz123/p/18516676

相关文章

  • 根据字符串,获取实体属性上的annotation,如:createTime” 找到对应实体属性中的 TableFi
    根据字符串,获取实体属性上的annotation,如:createTime”找到对应实体属性中的TableField(value="create_time",fill=FieldFill.INSERT)Field[]fields=clazz.getFields();//仅能获取类(及其父类)public属性成员Field[]declaredFields=clazz.getDeclaredFields();......
  • 百度二面算法:合法的括号字符串(贪心解法)
    目录标题1.题目1.1示例2.利用贪心算法求解2.1代码结构分析2.1.1代码优缺点2.1.2星号的角色分析2.1.2.1处理星号的逻辑2.1.2.2整体逻辑2.1.2.3代码逻辑总结2.2贪心的策略体现2.2.1贪心策略的应用1.题目给定一个字符串s,字符串......
  • 算法学习笔记6: 字符串
    字符串字符串哈希通过求解字符串前缀的哈希值的方式,可以比较字符串内任意字串的相等情况。首先需要把每个字符映射成数字,是什么无所谓(因为字符不好计算哈希值呀),然后类似于计算前缀和的方式,这里是计算h[i]表示前i个字符的哈希值。然后把要计算的每个前缀字符串看作是一个P......
  • 【C++】string 类深度解析:探秘字符串操作的核心
     快来参与讨论......
  • 3216. 交换后字典序最小的字符串
    给你一个仅由数字组成的字符串s,在最多交换一次相邻且具有相同奇偶性的数字后,返回可以得到的字典序最小的字符串。如果两个数字都是奇数或都是偶数,则它们具有相同的奇偶性。例如,5和9、2和4奇偶性相同,而6和9奇偶性不同。示例1:输入:s="45320"输出:"43520"解......
  • Leetcode 3216. 交换后字典序最小的字符串
    因为字符串长度只有100,所以直接模拟就行了。字符串比较不想写的话,可以用C的strcmp1classSolution{2public:3stringswap(string&s,inti,intj){4stringres="";5for(intk=0;k<i;k++)6res+=s[k];7res+=s[j];......
  • 【OJ题解】C++ 把字符串转换成整数
    ......
  • 字符串匹配-KMP算法实现代码
    字符串的基本操作同上一篇BF算法一致一.为模式串创建临时数组//KMP算法//1)为模式串创建临时数组voidcomputeLPSArray(char*pat,intM,int*lps){ //指向首元素 intj=0; //指向首元素的下一个元素 inti=1; //临时数组的首元素总为0 lps[0]=0; //结束条......
  • 用人话讲计算机:小白版Python篇!(四)关于列表、集合、字典、元组初步认识
    注:本章节所写列表、集合、字典、元组等均只涉及初步认识,重在理解,后续会出相关专题专门详细介绍每一种。一、列表列表是python中的一种数据结构,它可以同时存储整数、浮点数、字符等东西!简单来说,你可以将它理解为:专业储存箱,主打一个来者不拒。1.列表长什么样用[]扩住各......
  • MySQL的where条件字符串区分大小写的问题
    https://blog.csdn.net/qq_45783259/article/details/132231226MySQL的where条件字符串区分大小写的问题在MySQL的默认情况下字符集采用的是utf8mb4,排序规则是utf8mb4_general_ci,这种情况下where条件遇到字符串是不区分大小写的。比如以下两条SQL语句查询出来的结果都是一样的,即......