如何确定可以从一袋字母和一袋单词python中组成的单词的数量和集合
Posted
技术标签:
【中文标题】如何确定可以从一袋字母和一袋单词python中组成的单词的数量和集合【英文标题】:How to determine the count and set of words that can be made from a bag of letters and bag of words python 【发布时间】:2021-07-09 11:39:50 【问题描述】:我有一个任务,我想返回可以从字母袋作为元组生成的单词计数和列表(从单词袋中)。想象一下,字母和单词是物理碎片,您需要将字母与单词匹配以完成单词。不允许两次使用相同的物理字母,也不允许两次使用相同的物理单词,除非它们在各自的包中重复存在。我知道如何获取可能的单词列表,但我不确定如何优化它以选择可能的单词,而不是生成所有可能的单词组合。
这是一个例子。想象一下你有一袋字母(类似于 Scrabble):
[ g t o g l v o r d e a b ]
还有一袋可能的词:
[word bag got we love]
在这种情况下,答案应该是(3, ['bag', 'got', 'love'])
我发现了一些类似的“查找可能的单词列表”或可能适用的递归求和问题,但没有找到从 Python 中的一组字母中找到可能的并发单词集的地方。
这是我为 C# 找到的示例:
Finding the set of words that can be spelled with a given set of letters
以下是查找任何单词列表的示例:
Python: find possible words that can be made from 7 random letters
【问题讨论】:
拥有 1k+ 代表,我希望你能按照说明进行操作,我是 How to Ask 好一点 你能解释一下你认为这个问题的问题吗?我很高兴进行编辑。我已经多次阅读“如何提问”页面,但我不确定您指的是什么问题。如果您愿意,我可以添加指向我的研究和我试验过的代码的链接。 你能澄清你到底在问什么吗?就目前而言,这似乎是针对针对您的任务描述,而不是针对我们的问题。您在完成这项任务时遇到什么问题?你究竟需要什么帮助?将您发现的内容用于此相关任务时,您遇到了什么问题? @MisterMiyagi,感谢您的建议。我试图像我的描述那样简短且更“任务”,但我现在看到以这种方式格式化它是不受欢迎的。希望我的描述现在更好? FWIW,我也没有得到任务描述。 “使用相同的字母两次”是否适用于每个单词 或所有单词?任务是找到最大个单词吗?如果两袋结果字数相同怎么办?您认为什么是蛮力方法,进而您认为什么是有效的非蛮力答案? 【参考方案1】:我能想到的最好的“不那么暴力”的方法是:
letters=Counter('gtoglvordeaby')
words=['word', 'bag', 'got', 'we', 'love', 'doggy', 'dolly']
found = []
for word in words:
wordbag=Counter(word)
for wk,wv in wordbag.items():
if wv > letters[wk]:
break
else:
found.append(word)
print(len(found), found)
(我只是添加了一个字母和几个单词,以检查当一个单词需要多次出现某个字母时它的行为是否正确)。
当然,我有兴趣了解更好的算法
【讨论】:
谢谢,但这会破坏以下输入:letters=Counter('gtoglvordeabyaaa')
和 words=['word', 'bag', 'got', 'we', 'vaa', 'love', 'doggy', 'dolly', 'a', 'a', 'a']
它没有考虑针对更高数量的单词进行优化,这需要您确定每个可能的单词集,或者我认为,使用某种递归搜索。
它是怎么破的?我收到8 ['bag', 'got', 'vaa', 'love', 'doggy', 'a', 'a', 'a']
,你会期待什么?
信袋里只有4个a。您的输出包括 5 个 a's
tbh 有 6 个,g 也有 4 个。正如 MisterMiyagi 在之前的评论中所问的那样,“使用相同的字母两次”是适用于每个单词还是适用于所有单词?我假设它是每个单词,如果假设是错误的,那么我上面的代码不是解决方案
对。在 Miyagi 提出他们的问题后,我更新了帖子以试图更清楚地说明“你不能使用相同的物理字母两次,并且你不能使用相同的物理单词两次,除非它们在各自的袋子。”以上是关于如何确定可以从一袋字母和一袋单词python中组成的单词的数量和集合的主要内容,如果未能解决你的问题,请参考以下文章