固定长度的最常见子字符串 - 需要简单的解决方案
Most frequent substring of fixed length - simple solution needed
请描述(没有实现!(算法(可能是最快的( 接收 n 个字母和正整数 k 的字符串作为 参数,并打印长度为 k 的最常见子字符串(如果 有多个这样的子字符串,算法打印其中任何一个(。 字符串由字母"a"和"b"组成。例如:对于字符串 ababaaaabb 和 k=3 答案是"aba",它出现了 2 次(事实 它们重叠并不重要(。描述算法,证明其 正确性并计算其复杂性。
我只能使用C++的最基本函数:没有向量、类、对象等。我也不知道字符串,只知道字符表。有人可以向我解释一下算法是什么,可能使用代码实现以便于理解?这是大学考试的问题,这就是为什么它如此奇怪。
一个简单的解决方案是从左到右尝试所有可能的子字符串(即从索引i=0
到n-k
开始(,并将每个子字符串与下一个子字符串进行比较(即从索引开始j=i+1
到n-k
(。
对于每个i
-子字符串,您计算出现次数,并跟踪到目前为止最频繁的出现次数。
作为字符串比较,最坏的成本是k字符比较,您将执行(n-k-1)(n-k)/2
此类比较,总成本为O(k(n-k)²)
顺序。[事实上,成本可以更低,因为某些字符串比较可能会提前终止,但我无法执行评估。
此解决方案很简单,但可能效率不高。
理论上,您可以使用更有效的字符串匹配算法(如 Knuth-Morris-Pratt(来降低成本,从而产生O((n-k)(n+k))
操作。
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 对于 ~95% 写入/5% 读取线程安全的无序列图,有没有一个简单的解决方案?
- 固定长度的最常见子字符串 - 需要简单的解决方案
- 简单的智能感知解决方案
- 简单程序没有输出和崩溃.我的解决方案有什么问题
- 在DLL中使用的最简单的C++PUSH通知/POST解决方案
- 简单解决方案的输出不正确
- 简单的尝试 c++ 的捕获循环解决方案
- 一个好的,简单的,便携式的解决方案,用于等待输入C++
- 遍历数组的简单任务.以下哪种解决方案最有效
- 比迭代所有组合更简单的解决方案
- 无法链接简单的DLL解决方案
- 在一个文件夹(及其子文件夹)的所有文件上循环:最简单的解决方案
- 用于链接 HTTP->SOCKS5 代理的简单单行解决方案