首页 > 代码库 > 字符串的哈希表
字符串的哈希表
放上代码吧,我也不会解释,可以看看ancestor大佬的解析
以后补上
1 #include<bits/stdc++.h> 2 #define LL unsigned long long 3 using namespace std; 4 LL h[1000000]; 5 LL seed=163; 6 int ans=0; 7 int n; 8 9 int hash(string str) 10 { 11 int Hash=0; 12 for(int i=0;i<str.length();i++) 13 Hash=(Hash*seed+str[i]-‘0‘); 14 return Hash; 15 16 } 17 18 int main() 19 { 20 cin>>n; 21 string str; 22 for(int i=0;i<n;i++) 23 { 24 cin>>str; 25 h[i]=hash(str); 26 } 27 sort(h,h+n); 28 for(int i=0;i<n;i++) 29 if(h[i]!=h[i+1]) 30 ans++; 31 cout<<ans<<endl; 32 return 0; 33 }
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #define LL unsigned long long 5 #define seed 163 6 using namespace std; 7 LL s[1000]; 8 LL hb[1000],ha[1000],ta[1000],tb[1000]; 9 LL ans=0; 10 int main() 11 { 12 char a[1000],b[1000]; 13 int i; 14 a[0]=b[0]=‘0‘;//strlen碰到0停止计数 15 cin>> a+1 >> b+1; 16 s[0]=1; 17 int len1=strlen(a)-1,len2=strlen(b)-1; 18 for(int i=1;i<=max(len1,len2);i++) 19 s[i]=s[i-1]*seed; 20 for(int i=1;i<=len1;i++) 21 ha[i]=ha[i-1]*seed+a[i]; 22 for(int i=1;i<=len2;i++) 23 hb[i]=hb[i-1]*seed+b[i]; 24 for(int i=len1;i>=1;i--) 25 ta[i]=ta[i+1]+a[i]*s[len1-i]; 26 for(int i=len2;i>=1;i--) 27 tb[i]=tb[i+1]+b[i]*s[len2-i]; 28 for(int i=1;i<=min(len1,len2);i++) 29 if(ha[i]==tb[len2-i+1]||hb[i]==ta[len1-i+1]) ans=i; 30 cout<<ans<<endl; 31 return 0; 32 }
这是洛谷p2957
字符串的哈希表
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。