PAT A1092

题目链接

这个题主要卡在散列上(hashmap)

其实可以直接用map(char,int)

尝试了一下用c自己手动构造hashmap的过程

attention:如果是普通的数组,str[i]中的这个i一定要是个Int

本题中的散列思想主要是,既然只有[0~9][a~z][A~Z],那我们可以把它对应到数组的0~9 10~36 ,,,这样,大大减小了空间的使用


#include<iostream>
#include<vector>
#include <unordered_set>
#include <unordered_map>
#include <cstring>
#include <stdio.h>
#include <algorithm>
using namespace std;
int hashmap[256]={0};
int sum=0;//the number of all
int num=0;//the number of need
int change(char c){
    if(c>='0'&&c<='9'){
        return c-'0';
    }
    else if(c>='a'&&c<='z'){
        return c-'a'+10;

    }
    else{
        return c-'Z'+40;//这里其实加36就行
    }
}
char c1[1010],c2[1010];
int main(){

    scanf("%s",c1);

    scanf("%s",c2);
    bool flag= true;
    int len1=strlen(c1);
    for (int i = 0; i < len1; ++i) {
        hashmap[change(c1[i])]++;
        sum++;
    }
    int len2=strlen(c2);
    for (int i = 0; i < len2; ++i) {
        if(hashmap[change(c2[i])]){
            hashmap[change(c2[i])]--;
            sum--;
        }
        else{
            flag=false;
            num++;
        }

    }
    if(flag){
        printf("Yes %d",sum);
    }
    else{
        printf("No %d",num);
    }

    return 0;


}
posted @ 2021-07-17 18:07  安之若醇  阅读(31)  评论(0编辑  收藏  举报
Live2D服务支持