- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
Pangram是使用字母表中的每个字母至少一次的句子。
是否可以生成最短的Pangram来自给定的单词列表?
比方说,我有这样的单词列表
cat monkey temp banana christmas
fast quick quickest jumping
white brown black blue
fox xor jump jumps oven over
now the is was
lazy laziest crazy
dig dog joker mighty
并喜欢生成可能的 pangrams 列表,如下所示
the quick over lazy jumps fox dog brown
brown dog fox jumps lazy over quick the
quick brown fox jumps over the lazy dog
语法和词序暂时不需要考虑(我打算用非英语语言)
任何想法、算法、代码、引用,将不胜感激!
PS:这不是作业
最佳答案
从单词列表中生成所有可能的 pangram 的最简单方法可能是从列表中生成所有可能的单词组合,然后针对每个单词检查它是否是 pangram。要进行检查,遍历字符串并将字符串中的每个字母的 bool 值设置为 true。最后,如果 bool 值都设置为 true,则它是一个 pangram。
更有效的方法可能是遍历每个单词,并设置一个 bool 数组(或一组位,例如在 32 位 int 中)以及单词的长度。然后你可以找到 or'd 一起产生一个值的位,所有 26 位都设置了,你就有了一个 pangram。
当您将 pangram 放在一起时,您可以添加边界检查,因此如果添加一个单词会使潜在的 pangram 比您当前最短的 pangram(如果有的话)更长,您可以立即停止该检查。如果您首先按长度对单词进行排序,那么在您找到更长的组合的那一刻,您就可以放弃整组尝试,并继续下一个可能性。
如果您想对其进行更复杂的了解,您可以从构建与上述相同类型的位集开始。然后把这些,加在一起以确定哪些字母出现在最少的单词中。当您开始生成一个潜在的 pangram 时,您知道它必须包含其中一个词。例如。在您上面给出的列表中,“lazy”、“laziest”和“crazy”似乎是唯一包含“z”的,因此您立即知道每个 pangram 必须包含这三个之一字。这些都不包含“q”,唯一包含“q”的词似乎是“quick”和“quickest”,所以(再次)每个 pangram 都必须包含这两个词之一(当然我要去来自此处的手动检查,所以我可能漏掉了一个词)。因此,该列表中的每个可能的 pangram 都包括(也可能以以下开头):(quick|quickest) (lazy|laziest|crazy)。
您还可以考虑预处理您的单词列表:任何比另一个长但不包含至少一个字母缺失的单词都可以立即被删除。举个假设的例子,如果你有“ab”和“abab”,你知道“abab”永远不会产生比“ab”更短的全字母组合,所以你最好立即从列表中删除它。
关于algorithm - 是否可以从给定的单词列表生成 Pangram?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1874726/
这是我编写的全语法的函数。由于某种原因,alpha[num]采用a,c,e,g等而不是采用a,b,c,d,e等等 def ispangram(str1,alphabet=string.ascii_lo
Pangram是使用字母表中的每个字母至少一次的句子。 是否可以生成最短的Pangram来自给定的单词列表? 比方说,我有这样的单词列表 cat monkey temp banana christma
给定一个包含字母 a-z 至少一次的单词列表,你将如何编写一个程序来找到最短的 pangram按字符数(不计算空格)算作单词的组合? 由于我不确定是否存在简短答案,因此这不是代码高尔夫,而只是讨论您将
我正在尝试编写一个 REGEX 来测试 PANGRAM。我可以用传统的方式来做,但似乎无法用正则表达式解决超过 90% 的测试。 输入:字符串 输出:真||假的 function isPangram(
我想创建一个将字符串作为输入的函数,并检查该字符串是否为 pangram(pangram 是一段包含字母表中每个字母的文本)。 我编写了以下代码,该代码有效,但我正在寻找一种替代方法,希望是一种短路方
import java.io.*; import java.util.*; public class Solution { public static final int n = 26;
这是一个几乎正确的全字词程序,但我不明白为什么它不起作用? int main() { /* Enter your code here. Read input from STDIN. Print
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在尝试为一组元素(字母表中的每个字母)设置正确的类。每个元素都有 id #alpha_0 到 #alpha_25。如果输入中的字母出现一次,则将该字母设置为绿色。如果字母出现不止一次,则将其设置为
恶作剧的念头让我想方设法找到完美的英语 Pangrams。我计划使用动态编程技术编写一个程序来尝试确定可能的完美 pangrams,除非其他人知道已经存在的 pangrams,或者能够为我提供已知的解
我厌倦了使用 Gimp 无休止地滚动所有字体来不规律地搜索完美字体,所以我想:“为什么不为每种字体构建一个可视的 pangrams 列表”。 因此,我尝试构建一个 php 脚本,该脚本在 .fonts
这个问题已经有答案了: What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? (25 个回答)
#include #include #include #include #define number_of_letters 26 bool IsPangram(char* string); int m
Pangram 是一个获取输入并检查它是否包含所有字母的函数,这是我使用 ASCII 代码的代码: function pangram(x) { var a; for (var i =
我试图通过在 Java 中使用 set 来确定字符串是否为 pangram 我试过下面的代码。现在输出显示不是 pangram,但它应该是 pangram。请告诉我我的解决方案有什么问题 //
这是如何运作的?它检查一个字符串是否至少包含一次从 a 到 z 的每个字符? import string def ispangram(str1, alphabet=string.ascii_lower
到目前为止,我已经想到了这个。我试图最小化字符串操作并将解决方案隔离到内置数据类型、数组和整数操作。 我正在寻找更优雅的方法来检查 pangram 字符串,在 java 中。 优雅,代码行最少,也欢迎
自枚举 pangrams 的 wiki 文章指出它们是使用二元决策图计算的。我一直在阅读有关 BDD 的文章,根据我的理解,您需要先将某个问题表示为 bool 函数,然后才能为其构建 BDD。 我该怎
我必须编写一个函数,它接受一个字符串并返回字符串中所有缺失的字母。下面的函数看起来很简单,但它没有返回任何东西。有什么提示吗? string getMissingLetters(const strin
我必须找出句子是 pangram(Pangram 是通过使用字母表中的每个字母至少一次构造的句子)或不是 因超时而终止。为什么我觉得没问题?怎么想的。我在 hackerrank 上使用这个。 请告诉我
我是一名优秀的程序员,十分优秀!