检查长随机字符串(C++)中可能的英语单词
check possible english words in long random string (C++)
给定一个随机字符串:
KUHPVIBQKVOSHWHXBPOFUXHRPVLLDDAPPLEWPREDDVVIDWQRBHBGLLBBPKQUNRVOHQEIRLWOKKRDD
如何检查随机字符串中是否包含可能的英语单词?
搜索这个字符串中所有可能的英语单词最有效的方法是什么?
我已经下载了英语词典文本文件。
我想比较字符串和英语词典文本文件,找出可能的单词。
有人能给我一些提示吗?
我建议使用暴力方法。在使用此方法后,您可以稍后进行优化。
蛮力算法:
For each word in the dictionary,
search the string for that word.
其他方法可能需要更长的时间。你将不得不问自己,"花时间让这种算法更高效值得吗?"
对于不经常使用的情况,答案是否定的。作为对在线法官的回答,也许你需要提高效率。如果你有很多这样的字符串,那么也许你应该优化算法。
您可以根据字典中的单词构建DAG,并使用它来搜索命中率。例如,如果您的字典中包含单词
- 自动
- 高速公路
- 奥地利
这将导致类似的图形
a -> u -> t -> o -> 'hit'
| |
| |-> b -> a -> h -> n -> 'hit'
|
-> s -> t -> r -> i -> a -> 'hit'
基于这个数据结构源(这里有一个库),你可以从随机字符串的每个位置开始输入字母,直到没有边缘可以跟随,或者直到你获得命中为止。
由于DAG不更新,因此可以通过从随机字符串中的不同位置开始并行执行。
以下是如何构建这样的搜索结构:
// Inserts keys into a simple dawg.
dawgdic::DawgBuilder dawg_builder;
dawg_builder.Insert("auto");
dawg_builder.Insert("autobahn");
dawg_builder.Insert("austria");
// Finishes building a simple dawg.
dawgdic::Dawg dawg;
dawg_builder.Finish(&dawg);
// Builds a dictionary from a simple dawg.
dawgdic::Dictionary dic;
dawgdic::DictionaryBuilder::Build(dawg, &dic);
// Checks if a key exists or not.
if (dic.Contains("auto"))
std::cout << "auto: found" << std::endl;
// Finds a key and gets its associated record.
if (dic.Find("august") < 0)
std::cout << "august: not found" << std::endl;
相关文章:
- 文本文件中的单词链表
- 在指针的帮助下,文本文件中单词的频率
- 如何根据单词在文本中出现的概率输出单词
- 从字符串变量中逐字符读取单词
- 使用std::mt19937从字符串中返回一个随机单词
- 如何用for循环在c++中生成单词三角形
- 将数字转换为单词
- 使用if-else将数字转换为单词
- C++:从英语到Pig拉丁语
- C++-字符串是否包含一个带有简单循环的单词
- 使用单词"not"作为C ++类的名称会导致VS2019错误
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 3-3. 编写一个程序来计算每个不同单词在其输入中出现的次数
- C++为一串单词添加空格
- 在C++中查找(奇怪的)字符串中的单词
- 当字符串是某个单词时给出输出?
- 英语到猪拉丁语在C++使用特定功能
- 对于这个英语单词列表来说,什么是好的哈希函数?
- 检查长随机字符串(C++)中可能的英语单词
- 英语单词的好哈希函数是什么?