散列

 
 
#include <iostream>

using namespace std;
const int maxn=100;
char S[maxn][5],temp[5];
int hashTable[26*26*26+10];

int hashFunc(char S[],int len){
    int id=0;
    for(int i=0;i<len;i++){
        id=id* 26 + (S[i]-'A');
    }
    return id;
}
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++){
        scanf("%s",S[i]);
        int id=hashFunc(S[i],3);    //將字符串S[i]轉換爲整數
        hashTable[id]++;    //該字符串的出現次數加1
    }
    for(int i=0;i<m;i++){
        scanf("%s",temp);
        int id=hashFunc(temp,3);    //將字符串temp轉換爲整數
        printf("%d\n",hashTable[id]);   //輸出該字符串的出現次數
    }
    return 0;
}
 
 

 

/*將字符串S轉換爲整數*/
int hashFunc(char S[], int len){
    int id=0;
    for(int i=0;i<len;i++){
        id=id*25+s[i]-'A');     //將二十六進制轉換爲十進制
    }
    return id;
}
int hashFunc(char S[],int len){
    int id=0;
    for(int i=0;i<len;i++){
        if(S[i]>='A' && S[i]<='Z'){
            id=id*52+(S[i]-'A');
        }else if(S[i] >='a' && S[i]<='z'){
            id=id* 52+(S[i]-'a')+26;
        }
    }
    return id;
}
相關文章
相關標籤/搜索