欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pat-B1039/A1092-到底买不买

程序员文章站 2024-03-22 09:32:46
...

题目链接->link

思路

  1. 因为要求多余的珠子数或者缺少的珠子数,所以设int型hashmap[128]存储各种颜色的珠子数,输入时就可累计每种珠子数。
  2. 可以设缺少的珠子数used=0,当hashmap[i]不为0时,就减少1个;否则,说明缺少该颜色珠子,used+1;最后判断used的值即知道时缺少还是多余的情况,多余的珠子为len1-len2,由题意知多余时str1长度总是大于str2的,所以不用加绝对值。

代码

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <iostream>

using namespace std;

int main(){
    char str1[1005],str2[1005];
    int hashmap[128];//存储珠子颜色的个数
    memset(hashmap, 0, sizeof(hashmap));
    fgets(str1, 1005, stdin);
    int len1=strlen(str1);
    for(int i=0;i<len1;i++){
        char c1=str1[i];
        hashmap[c1]++;//对于颜色珠子数加1
    }
    fgets(str2, 1005, stdin);
    int len2=strlen(str2);
    int used=0;//记录第一串匹配第二串后缺失的颜色个数
    for(int i=0;i<len2;i++){
        char c2=str2[i];
        if(hashmap[c2])hashmap[c2]--;//如果这个颜色珠子数大于0,那么用掉一个珠子
        else used++;//如果等于0,说明缺少这个颜色的珠子,used+1
    }
    if(used)printf("No %d",used);//如果used大于0,说明缺少珠子,输出used
    else printf("Yes %d",len1-len2);//如果used等于0,说明不缺少珠子,两串之差为多余的珠子
    printf("\n");
    return 0;
}


相关标签: 散列