问题描述
给定一个字符串 s
和整数 k
,编写一个函数实现字符串的旋转操作。例如:当 s = "hello"
且 k = 2
时,旋转后应得到 "lohel"
。
示例
- 输入:
s = "abcde", k = 3
输出:"deabc"
- 输入:
s = "abcdefg", k = 1
输出:"gabcdef"
解决方案思路
暴力法
- 循环
k
次,每次将字符串首字符移动至末尾 - ⚠️ 时间复杂度为
O(n*k)
,适用于小数据量场景
- 循环
字符串拼接法
- 将字符串拆分为两部分,拼接后旋转
- ✅ 时间复杂度
O(n)
,推荐用于大多数情况 - 示例:
s = "abcdef", k = 2
→"cdefab"
队列优化
- 使用双端队列实现高效旋转
- 🚀 时间复杂度
O(n)
,空间复杂度O(n)
代码实现(Python)
def rotate_string(s: str, k: int) -> str:
n = len(s)
k = k % n # 避免多余旋转
return s[-k:] + s[:-k] if k != 0 else s
扩展阅读
💡 提示:若 k
大于字符串长度,可通过取模优化性能。