算法找到2个字符串中的常用字符数

时间:2014-02-09 18:52:30

标签: c string algorithm

我正在编写一个c程序来查找两个字符串中常见字符的数量。

  

例如:aabbccc aabc答案:4

   aabcA     aa       Ans:2

(字符串将包含大写,小写和数字)

我脑子里有两种算法

假设字符串的长度为n,m

1.排序数组,然后计算O(nlogn + mlogm)复杂度

2.scan通过两个字符串并使用计数数组 - O(n + m)复杂度

有人可以建议进一步优化或任何其他方法来做到这一点吗?

2 个答案:

答案 0 :(得分:1)

基本上你问的是 Bag(Multiset)交叉点

我想没有比O(n + m)更有效的算法因为你必须至少经历一次两个袋子的每一个元素。

答案 1 :(得分:0)

因为大输入需要优化,我认为你的第二种方法非常好(计算数组方法)。无论您尝试找出哪种算法,如果不完全查看这两个字符串,就无法找到问题的答案。因此,该问题不应该进一步优化,因为它已经是O(m + n)。我认为对于较小的输入,您的第一个算法将更快地工作,因为与您的第二个算法相关联的O(26 + 26 + 10)常数。但如果您真的对更快的代码感兴趣,那么尝试优化读取和写入输出的方法。您可以谷歌搜索“C ++中更快的I / O”并阅读它。