leetcode---小红到底买不买珠子问题

题目链接
来源:牛客网
问题描述:


小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一
下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。


为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如,YrR8RrY是小红想做的珠串;那么ppRYYGrrYBR2258可以买,因为包含了
全部她想要的珠子,还多了8颗不需要的珠子;ppRYYGrrYB225不能买,因为没有黑色珠子,并且少了一颗红色的珠子。
输入描述:
每个输入包含1个测试用例。每个测试用例分别在2行中先后给出摊主的珠串和小红想做的珠串,两串都不超过1000个珠子。

输出描述:


如果可以买,则在一行中输出“Yes”以及有多少多余的珠子;如果不可以买,则在一行中输出“No”以及缺了多少珠子。其间以1个空格分隔。
示例1
输入
ppRYYGrrYBR2258
YrR8RrY
输出
Yes 8

问题分析


这个问题其实就是关于字符查找的问题,一串成品的珠子为源字符串(src),小红想要的珠子为目标字符串(target),其实就是在源字符串中匹配target中字符,且因为小红想要的珠子可能存在重复的,所以不仅target中字符要在src中存在,而且数量还要足够多。

  • 又因为输入的有限个字符,因为 0~9,a~z,A~Z 这些有效字符对应的ASCII码在 48到122之间
  • 所以用一个大小为123哈希表,来保存src字符串中的字符存在个数
  • 然后遍历target中的字符,看对应的哈希表中这一个字符数量是否为0
  • 不为0,就说明src中存在这个珠子,然后将哈希表中这一字符数量个数减一
  • 为0,据说名小红想要的这个珠子不存在,就标记为缺少。
  • 这样在遍历完target字符串后,我们根据是否缺少珠子来看小红有没有必要买这串珠子
#include <stdio.h>
#include <vector>
#include <stding>
#include <string.h>
#include <iostream>
using namespace std;

int main()
{
    string src;
    string target;
    while(cin >> src)//输入源字符串
    {
        cin >> target;//输入目标字符串
        size_t src_len = src.size();
        size_t target_len = target.size();
        vector<int> v1;//定义一个哈希表
        //因为 0~9,a~z,A~Z 这些有效字符对应的ASCII码在 48到122之间
        //所以用一个大小为123哈希表,来保存src字符串中的字符存在个数
        v1.resize(123);
        //这里采用resize()会将顺序表元素全部初始化初始化为0
        int i = 0;
        //用哈希表来保存src字符串信息
        for(i = 0; i < src_len; ++i)
        {
            v1[src[i]]++;
        }
        int lack = 0;//用来保存缺少的字符个数

        //遍历target字符串
        for(i = 0; i < target_len; ++i)
        {
            if(v1[target[i]] == 0)
            {
                lack++;//src中不存在该字符
            }
            else
            {
                v1[target[i]]--;//src中存在该字符
            }
        }

        if(  lack == 0)
        {//可以购买
            size_t len = src_len - target_len;
            cout<< "Yes"<<" "<<len<<endl;
        }
        else
        {//没必要购买
            cout<<"No"<<" "<<lack<<endl;
        }
    }
    return 0;
}

完。

猜你喜欢

转载自blog.csdn.net/Misszhoudandan/article/details/80883601
今日推荐