1458,1462 哈希:把字符串看成数字 输入一个字符串,把这个字符串的各个子串都用哈希值存储 "abcdefghijk" 123456789ab "abd" 124 "gij" 79a 进制转换 for(int i=0;i<s.size();i++){ //知道每个字符代表的数字(哈希值) } //a,b两个字符合并在一起的哈希值 a*进制+b 1*10+2 //ab,c两个字符合并在一起的哈希值 ab*进制+c //abc,a两个字符的哈希值,求bc哈希值 //abc,c两个字符的哈希值,求ab哈希值 输入一个字符串(全小写字母),把这个字符串的所有前缀哈希值求出来 再把这个字符串的所有后缀哈希值求出来 "abcde" 前缀 "a" "ab" "abc" "abcd" "abcde" 后缀 "e" "de" "cde" "bcde" "abcde" #include <iostream> #include <cmath> using namespace std; int jz=26; long long hx[10050];//每个字符的哈希值 long long hxqz[10050];//前缀哈希值 long long hxhz[10050];//后缀哈希值 string s; int main(){ //cin>>s; s="abcdabcd"; for(int i=0;i<s.size();i++){ hx[i+1]=s[i]-'a'+1; cout<<hx[i+1]<<"\t"; } cout<<endl; for(int i=1;i<=s.size();i++){ hxqz[i]=hxqz[i-1]*jz+hx[i]; cout<<hxqz[i]<<"\t"; } cout<<endl; for(int i=1;i<=s.size();i++){ hxhz[i]=hx[s.size()-i+1]*round(pow(jz,i-1))+hxhz[i-1]; cout<<hxhz[i]<<"\t"; } return 0; } (责任编辑:admin) |