我试图写一段代码来列出可能的单词,当给出一个扰乱的单词作为用户输入时,所以基本上是一个解码器。我想知道任何有效的方法来读取用户的输入(scanf,getchar()等)以及如何将它与wordlist文本文件中的单词进行比较。
我最初的想法是扫描用户输入,将其分解为数组并列出字母数,例如单词" etst"将注册e = 1,s = 1,t = 2.然后,我将逐行扫描文本文件,匹配字符串长度(4),将其与用户输入(etst)进行比较,然后输出任何在数组中使用相同字母的单词,得到找到的单词:" test"。
另一个例子: 输入:" emta", a = 1,e = 1,m = 1,t = 1, strlen = 4, 与wordlist比较, 输出:团队,肉,伙伴,驯服。
非常感谢任何帮助!
答案 0 :(得分:0)
这是一个经常在采访中提出的问题。有多种方法可以解决这个问题。
你的方法基本上是正确的。
让我们看看不同方法的好处。
1) HashCode:如果您找到一种方法可以为不等字符组合的唯一单词生成唯一代码,您可以始终将其哈希码等同,以查找给定单词是否代表某个单词在你的单词列表中。例如:如果您有输入:“emta”,“a = 1,e = 1,m = 1,t = 1”已经是每个字符计数的密码,然后是“团队,肉,伙伴,驯服“给你相同的哈希码。因此,您可以将hascodes等同于匹配单词。该解决方案是O(n)。
2)排序:您可以对输入单词进行排序,并将其与单词列表中排序的所有单词进行匹配。您选择的排序算法取决于您,但不应该是bubblesort。
同样还有其他方法可以解决这个问题,但有一点是正确的,你需要一个有效的英语单词列表来解决这个问题,因此,你还需要一个哈希表来快速访问这些单词。在HashCode的情况下,HashTable的键可以是HashCode本身,并且在排序单词长度或排序单词本身时。
您可以根据可用的不同数据结构考虑其他解决方案。一种解决方案可能是使用二叉树并在其节点中保留字符数。这将再次成为O(n)解决方案。
答案 1 :(得分:0)
你可以找到字符串的字谜,然后用strcmp()函数检查文件中的所有单词。