Mar*_*oun 1 compression string
在访谈中有一个关于压缩字符串的常见问题.我不是在寻找代码,我只需要一种能够解决问题的高效算法.
给定一个字符串(例如aaabbccaaadd),压缩它(3a2b2c3a2d).
我的解决方案
在绳子上旅行.每当我看到同一封信,我都会相信它.当我看到另一封信(并重新开始)时,我会输出信件和计数器.
有更有效的方法吗?
谢谢
小智 6
这称为运行长度编码,您命名的算法基本上是您获得的最佳算法.它需要O(1)辅助存储(保存最后看到的符号,或者等效地检查即将到来的元素;还保存一个计数器,显示你看过多少个相同的符号)并在O(n)时间内运行.由于您需要至少检查一次符号以了解结果,因此无论如何都不能比O(n)时间好.更重要的是,它还可以一次处理一个符号流,并一次输出一个符号,因此实际上只需要O(1)RAM.
您可以采用一些技巧来更好地获得常数因子,但算法基本保持不变.这些技巧包括:
如果您的数据源很慢,那么这种微优化可能没有实际意义.对于优化级别,我的一些点在上面的地址,甚至RAM也算慢.