【发布时间】:2011-10-25 20:59:20
【问题描述】:
给定两个字符串,设计一个函数来检查它们是否相互旋转而不对其进行任何更改?返回值是布尔值。
例如 ABCD、ABDC,它们不是旋转。返回错误
ABCD、CDAB 或 DABC 是旋转。返回真。
我的解决方案:
将其中一个向右或向左移动一个位置,然后在每次迭代时比较它们。 如果它们在所有迭代中都不相等,则返回 false。否则,返回真。
是 O(n)。还有其他更有效的解决方案吗? 如果它们的内容无法更改怎么办?
谢谢
【问题讨论】:
-
我认为您需要检查您的 O() 表示法。这不是 O(n)。
-
首先,正如@Chriszuma 指出的那样,您的算法不是 O(n)。其次,你不可能比 O(n) 做得更好,因为这只是 检查 字符串所必需的。 (很明显,如果不检查字符串,你就无法解决这个问题。)我严重怀疑你甚至可以为这个问题实现 O(n)。
标签: c++ string algorithm comparison rotation