首页 > 试题广场 >

到底买不买(20)

[编程题]到底买不买(20)
  • 热度指数:11088 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一
下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。

为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如,YrR8RrY是小红想做的珠串;那么ppRYYGrrYBR2258可以买,因为包含了
全部她想要的珠子,还多了8颗不需要的珠子;ppRYYGrrYB225不能买,因为没有黑色珠子,并且少了一颗红色的珠子。

输入描述:
每个输入包含1个测试用例。每个测试用例分别在2行中先后给出摊主的珠串和小红想做的珠串,两串都不超过1000个珠子。


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

输入

ppRYYGrrYBR2258<br/>YrR8RrY

输出

Yes 8
a, b = input(), input()
no_cnt = 0
for i in b:
	if i not in a:
		no_cnt += 1
	else:
		a = a.replace(i, '', 1)
if no_cnt == 0:
	print('Yes', len(a))
else:
	print('No', no_cnt)

发表于 2019-08-30 10:01:09 回复(0)

统计各个字母是否存在,以及是否缺少

# -*- coding : utf-8 -*-
from collections import Counter

str1 = list(input())
str2 = list(input())
counter1 = dict(Counter(str1))
counter2 = dict(Counter(str2))
flag = True
less = 0
more = 0
for key in counter2.keys():
    if key not in counter1.keys():
        flag = False
        less += counter2[key]
    else:
        minus = counter1[key] - counter2[key]
        if minus>=0:
            more += minus
            del counter1[key]
        else:
            less += abs(minus)
            flag = False
if flag:
    print(counter1)
    for _, val in counter1.items():
        more += val
else:
    pass
if flag:
    print('Yes', more)
else:
    print('No', less)
编辑于 2019-05-30 13:09:33 回复(0)
had_list = list(input())
want_list = list(input())
want_list_set = set(want_list)
flag = 0 shao = 0  for i in want_list_set:
    dict1 = {}
    wang_num = want_list.count(i)
    had_num = had_list.count(i) if wang_num > had_num:
        flag = 1  shao = wang_num - had_num + shao else: pass if flag == 1: print("No %d"%shao) else: print("Yes %d"%(len(had_list)-len(want_list)))
发表于 2019-02-13 17:07:01 回复(0)
from collections import Counter
have,want=raw_input(),raw_input()
count_h,count_w=Counter(have),Counter(want)
res=[count_h[i]-count_w[i] for i in count_w]
if all(val>=0 for val in res):
    print 'Yes'+' '+str(len(have)-len(want))
else:
    print 'No'+' '+str(abs(sum(filter(lambda c:c<0,res))))
发表于 2019-01-15 16:15:10 回复(0)
#计算想要的珠子集合里,想要的和已有的数量谁多,想要的多的话就是缺失
#有缺失输出No,否则输出Yes
try:
    while True:
        have = input()
        want = input()
        lost = 0
        for i in set(want):
            if have.count(i) < want.count(i):
                lost += want.count(i)-have.count(i)
        if lost:
            print('No %d'%lost)
        else:
            print('Yes %d'%(len(have)-len(want)))

except Exception:
    pass

编辑于 2018-11-18 20:58:01 回复(0)