【发布时间】:2020-06-08 07:51:36
【问题描述】:
给定字符串循环左移 N 个位置,比如循环左移“abcXYZdef”3 个位置,得到“XYZdefabc”。
这里我提供2个解决方案:
- 将字符串左移 1 个位置,并执行 N 次。
- 将两个字符串合并为一个,并返回特定的子字符串作为结果。
问题是:是否有可能在 O(N) 时间和 O(1) 空间内实现这样的算法?
【问题讨论】:
-
left shift the string for 1 position, and do this for N times那么你将如何实现呢?你认为这种算法的复杂度是多少? -
你如何想象空间 O(N) 算法与 O(1) 时间?只需初始化内存需要 O(N)
-
标题和正文中陈述的时间和空间复杂性不匹配。
-
@darune: O(1) 空间意味着这里:旋转算法需要额外的一堆固定大小的空间(不依赖于要旋转的字符串的大小)。
-
@KamilCuk 实现与语句本身一样简单。我认为移动 K 次时的时间复杂度会是 O(K*N)?