首页 > 其他分享 >字符串哈希

字符串哈希

时间:2023-07-01 16:44:45浏览次数:41  
标签:ch long 哈希 ans 字符串 include

目录

字符串哈希

我们定义一个把字符串映射到整数的函数 f,这个 f 称为是 Hash 函数
我们希望这个函数 f 可以方便地帮我们判断两个字符串是否相等

注意哈希冲突!
将 Hash 函数值一样但原字符串不一样的现象称为哈希冲突。

例题

  1. P3370 【模板】字符串哈希
//>>>Qiansui
#include<map>
#include<set>
#include<list>
#include<stack>
#include<cmath>
#include<queue>
#include<deque>
#include<cstdio>
#include<string>
#include<vector>
#include<utility>
#include<iomanip>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<functional>
#define ll long long
#define ull unsigned long long
#define mem(x,y) memset(x,y,sizeof(x))
#define debug(x) cout << #x << " = " << x << endl
#define debug2(x,y) cout << #x << " = " << x << " " << #y << " = "<< y << endl
//#define int long long

inline ll read()
{
	ll x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-48;ch=getchar();}
	return x*f;
}

using namespace std;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<ull,ull> pull;
typedef pair<double,double> pdd;
/*
字符串哈希
这里使用进制哈希
*/
const int maxm=1e4+5,inf=0x3f3f3f3f,mod=998244353;
int n;
ull a[maxm];
set<ull> q;
string ss;

ull stringhash(string s){
	ull p=131,ans=0;
	for(auto a:s){
		ans=ans*p+a;
	}
	return ans;
}

void solve(){
	cin>>n;
	for(int i=0;i<n;++i){
		cin>>ss;
		q.insert(stringhash(ss));
	}
	cout<<q.size()<<'\n';
	return ;
}

signed main(){
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	int _=1;
//	cin>>_;
	while(_--){
		solve();
	}
	return 0;
}

标签:ch,long,哈希,ans,字符串,include
From: https://www.cnblogs.com/Qiansui/p/17519504.html

相关文章

  • 使用 ABAP 正则表达式提高字符串解析的执行效率
    在ABAP(AdvancedBusinessApplicationProgramming)中,正则表达式(RegularExpressions)是一种强大的工具,可用于处理字符串和文本数据。正则表达式可以帮助您执行各种任务,如查找和替换文本、验证输入格式或拆分字符串。本文将介绍在ABAP中使用正则表达式的几种方法。使用CL_ABAP......
  • 字符串在货币、日期、精度的处理
    1.区域设置--locale模块的setlocale函数区域设置是一个标识特定地理、文化和语言的系统参数。它影响如日期和时间格式、货币和数字格式以及其他地域相关的操作。在Python中,使用 locale.setlocale() 函数可以设置区域设置来适应不同的地区和语言要求。该函数的语法为:local......
  • 2023ACM暑假训练day 6-字符串
    目录DAY6字符串训练情况简介题DAY6字符串训练地址:传送门训练情况简介题题意:思路:......
  • 字符串格式化
    1.什么是字符串格式化?就是把字符串弄成⼀定的格式(往往就是留个位置,往里面填值)这个位置往往是格式符、占位符。2.字符串常见的3种格式化方式2.1格式符+%+变量/表达式2.2f'{变量或表达式}'也叫 f-strings 2.3 字符串对象的 format() 方法来格式化字符串3.格式......
  • [转]前台传递给后台的JSON字符串中的引号 “” 在JAVA后台被转义为 &quot
    1、问题:前台数据,JSON字符串带有引号“”,数据被传递到后台,引号被转义为&quot,后台无法解析。前台数据如下:正常后台数据如下:大部分正常,只有JSON字符串中的“”被转义为&quot2、解决:方法一:使用apache的lang包里的方法StringappJson=StringEscapeUtils.un......
  • Oracle CONNECT BY根据特定字符拆分字符串
    1、一行SELECTT.ID,REGEXP_SUBSTR(T.VALS,'[^,]+',1,LEVEL)ASVALFROM(SELECT'101'ID,'A,B'VALSFROMDUAL)TCONNECTBYLEVEL<=REGEXP_COUNT(T.VALS,'[^,]+');2、多行2-1、如果ID唯一不重复:SELECTT.ID,REGEXP_SUBSTR......
  • [代码]如何分析XML字符串(LINQ to XML)
    此代码演示如何使用XElement.Parse()方法分析XML字符串,并创建XElement元素。从编程效率来讲这种做法可能效率非常的高,但从代码的执行效率来看,还是使用函数构造的方式创建XML树的效率高一点。示例代码usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSys......
  • Base64编码和解码字符串
    Base64编码和解码字符串packagecom.example.core.mydemo.cpic;importorg.apache.commons.codec.binary.Base64;/***strEncode=aGVsbG8gd29ybGQ=*strDecode=helloworld*/publicclassBizRequestBase64Test{privatestaticfinalStringCHAR_SET_UTF_8=......
  • mysql 如何 使用一个字符串来进行排序
    如果想进行对一个字段进行排序,但是这个字段却不是int类型,适应varchar类型怎么办呢?常用的方式:给字符字段加上0,举例:1:假设scoreRate是一个varchar类型,并且值是一个百分(90%)的数据格式.要求:请获取scoreRate值最高的一条数据:sql:select*fromresultTableorderbyreplace(sco......
  • 处理字符串
    后端返回的字符串需要放到el-table-column中,有的字符串有换行符,显示在页面中是"XXXXXXXXXX\nXXXXXX",用v-html\white-space\正则处理str.replace(/\n/g,'<br>')都不行;仔细查看后端返回的原字符串为"XXXXXXXXXX\\nXXXXXX",用正则处理str.replace(/\\n/g,'<br>')后再用v-......