鱼C论坛

 找回密码
 立即注册
查看: 6835|回复: 53

[已解决]Python:每日一题 263

[复制链接]
发表于 2019-10-25 19:55:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天的题目:


比较两个字符串 A 和 B,确定 A 中是否包含 B 中所有的字符。字符串 A 和 B 中的字符都是大写字母

示例 1:

输入:A = "ABCD",B = "ACD"
输出:True
示例 2:

输入:A = "ABCD",B = "AABC"
输出:False


欢迎大家一起答题!
最佳答案
2019-10-25 20:10:04
  1. def fun(A, B):
  2.     alpha = [chr(i) for i in range(65, 91)]
  3.     dictA = {i: A.count(i) for i in alpha}
  4.     dictB = {i: B.count(i) for i in alpha}
  5.     for i in alpha:
  6.         if dictA[i] < dictB[i]:
  7.             return False
  8.     return True
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-10-25 20:10:04 | 显示全部楼层    本楼为最佳答案   
  1. def fun(A, B):
  2.     alpha = [chr(i) for i in range(65, 91)]
  3.     dictA = {i: A.count(i) for i in alpha}
  4.     dictB = {i: B.count(i) for i in alpha}
  5.     for i in alpha:
  6.         if dictA[i] < dictB[i]:
  7.             return False
  8.     return True
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-25 20:13:01 | 显示全部楼层

恭喜通过!

执行用时:101 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-25 20:28:33 | 显示全部楼层
  1. def func(stra,strb):
  2.     for each in strb:
  3.         if not each in stra:
  4.             return False
  5.         else:
  6.             stra = stra.replace(each,'',1)
  7.     return True
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-25 20:29:57 | 显示全部楼层

恭喜通过!

执行用时:101 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-25 20:31:46 | 显示全部楼层
  1. def check(A, B):
  2.     A = list(A)
  3.     for each_b in B:
  4.         for each_a in A:
  5.             if each_a == each_b:
  6.                 A.remove(each_a)
  7.                 each_b = 0
  8.                 break
  9.         if each_b:
  10.             return False
  11.     return True
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-25 20:32:14 | 显示全部楼层

恭喜通过!

执行用时:101 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-25 20:48:02 | 显示全部楼层
本帖最后由 阴阳神万物主 于 2019-10-25 21:26 编辑

我有点迷了,不是说
确定 A 中是否包含 B 中所有的字符

吗?那么 示例2 不该是返回的 True 吗?
A:'ABCD' B: 'AABC' 不该是包含了吗?B 里面并没有出现不属于 A 的字母啊。
即便如此,还是让我有点想回答呢,于是(代码中有着吐槽……)
  1. def solve_alpha(A:str,B:str)->bool:#没有数量上的比较,仅仅针对关键词“包含”
  2.     a = set(A)
  3.     b = set(B)
  4.     if len(b)>len(a):#好像多了些什么
  5.         return False
  6.     else:
  7.         for each in b:
  8.             if each not in a:#有奇怪的东西混进去了
  9.                 return False
  10.         return True
  11. def solve_bata(A:str,B:str)->bool:#有数量上的比较,这样的话 A 更像是仓库的感觉
  12.     b = set(B)
  13.     if len(b)>len(set(A)): #多了些东西啊喂!
  14.         return False
  15.     else:
  16.         for each in b:
  17.             if B.count(each) > A.count(each):#残念,客人萨玛,存量不足啊……
  18.                 return False
  19.         return True
  20. #预防万一,我理解到的两种情况都写了
  21. #校验者看着办吧,画圈圈……
  22. if __name__ == "__main__":
  23.     #alpha,虽然我倾向于这个……
  24.     #print("示例1 输出:",solve_alpha("ABCD","ACD"))
  25.     #print("示例2 输出:",solve_alpha("ABCD","AACB"))
  26.     #bata,但是这个好像保险点……
  27.     print("示例1 输出:",solve_bata("ABCD","ACD"))
  28.     print("示例2 输出:",solve_bata("ABCD","AACB"))
  29.    
复制代码


评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-25 20:48:05 | 显示全部楼层
  1. def is_subset(A,B):
  2.     visited = []
  3.     for cha in B:
  4.         if cha not in visited:
  5.             visited.append(cha)
  6.             if B.count(cha) > A.count(cha):
  7.                 return False
  8.     return True
  9. A = "AABCD"
  10. B = "AACD"
  11. print(is_subset(A,B))
复制代码

评分

参与人数 1荣誉 +1 贡献 +1 收起 理由
zltzlt + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-25 20:53:23 | 显示全部楼层
阴阳神万物主 发表于 2019-10-25 20:48
我有点迷了,不是说吗?那么 示例2 不该是返回的 True 吗?
A:'ABCD' B: 'AABC' 不该是包含了吗?B 里面并 ...

我和你有同样的疑问,但看了红字‘所有的字符’,强调了‘所有’,可能就包含重复吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-25 21:05:39 | 显示全部楼层
__mrsq__ 发表于 2019-10-25 20:53
我和你有同样的疑问,但看了红字‘所有的字符’,强调了‘所有’,可能就包含重复吧

你想想啊,26个英文字母能够组成所有的英文单词吧?
换句话说就是,26个英文字母包含了所有的英文单词啊!
再说了,“所有”、“一切”、“全部”之类的全称量词本身就很模糊啊!
很容易产生歧义的啊!
比如:“所有的语言最后都会编译为机器码” 这种话啊!在电脑上目前的确如此,但如果说让人去执行呢?不都得让执行的人能理解意思吗?如果让一个普通人去执行机器码的内容,就是在强人所难啊。这时候要达到效果就得是:“所有的语言最后都会编译为他能理解的语言”
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-25 21:09:30 | 显示全部楼层
阴阳神万物主 发表于 2019-10-25 21:05
你想想啊,26个英文字母能够组成所有的英文单词吧?
换句话说就是,26个英文字母包含了所有的英文单词啊 ...

你说的对,这个不咬文嚼字都让人感觉很有歧义
只能根据范例去强行理解了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-25 21:26:24 | 显示全部楼层
  1. def f(A,B):
  2.     a=len(A)
  3.     b=len(B)
  4.     if a>=b:
  5.         d={}
  6.         for i in range(a):
  7.             d[A[i]]=d.get(A[i],0)+1
  8.             if i<b:
  9.                 d[B[i]]=d.get(B[i],0)-1
  10.         for e in d.values():
  11.             if e<0:
  12.                 return False
  13.         return True
  14.     else:
  15.         return False
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-25 21:27:47 | 显示全部楼层
  1. def answer(A: str, B: str):
  2.     if len(B) > len(A):
  3.         return False
  4.     lst = list(A)
  5.     for char in B:
  6.         if char not in lst:
  7.             return False
  8.         else:
  9.             lst.remove(char)
  10.     return True
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-25 21:36:32 | 显示全部楼层
阴阳神万物主 发表于 2019-10-25 21:05
你想想啊,26个英文字母能够组成所有的英文单词吧?
换句话说就是,26个英文字母包含了所有的英文单词啊 ...


字符“串”B中所有“字符”理解为B中所有元素,而不是去重后的不相同元素。

否则题目变成集合求交集了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-25 21:36:41 | 显示全部楼层
阴阳神万物主 发表于 2019-10-25 20:48
我有点迷了,不是说
吗?那么 示例2 不该是返回的 True 吗?
A:'ABCD' B: 'AABC' 不该是包含了吗?B 里面 ...

A 中只有一个 A,B 中有两个 A
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-25 21:38:28 | 显示全部楼层
本帖最后由 zltzlt 于 2019-10-25 21:41 编辑
panheng 发表于 2019-10-25 21:36
字符“串”B中所有“字符”理解为B中所有元素,而不是去重后的不相同元素。

否则题目变成集合求交集 ...


没错,我一开始也是按集合的思路解题的,到后面发现错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-25 21:39:31 | 显示全部楼层
阴阳神万物主 发表于 2019-10-25 20:48
我有点迷了,不是说
吗?那么 示例2 不该是返回的 True 吗?
A:'ABCD' B: 'AABC' 不该是包含了吗?B 里面 ...

大家的运行时间都相同啊

执行用时:101 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-25 21:40:17 | 显示全部楼层

恭喜通过!

执行用时:101 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-25 21:40:51 | 显示全部楼层

恭喜通过!

执行用时:101 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-9 00:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表