【发布时间】:2013-10-11 10:49:40
【问题描述】:
我遇到了一个简单的(如我所想的)旋转字符串练习:
将字符串旋转K个字符意味着将这些字符从 开始并将它们转移到最后。如果 K 为负, 字符,相反应该从末尾转移到 开始。
我立即发明了使用两个子字符串连接的解决方案。但是,我发现了以下补充:
如果您想要更严峻的挑战,我们鼓励您“就地”进行轮换
任务来自 here - 确保这不是我的大学作业等
我看不到任何简单的方法来做到这一点(我想应该有 O(N) 算法)。如果我将第 0 个字符复制到临时变量并将第 K 个字符复制到它的位置,然后将第 2K 个字符复制到第 K 个的位置等等 - 如果 K 和字符串长度是互质的,我将成功。我想我可以管理其他 Ks 添加外部循环以重复从第 1 个字符到第 2 个字符的过程 - 我认为直到 GCD(K, strlen(S))
但它看起来太笨拙了。
【问题讨论】:
-
您想要 O(n) 空间复杂度(内存中的 n 个字符串)还是 O(n) 时间复杂度(基本上每个字符一个操作),还是两者兼有?
-
“就地”是指 O(1) 空间复杂度,所以 O(N) 当然是时间复杂度。感谢您的澄清!
标签: string algorithm optimization