字符串简单1 种解法
#K55右旋字符串
把字符串最右侧 k 个字符移动到最前面,保持两段内部相对顺序。
#字符串#双指针#卡码网
解题主线
01
整体反转后,再分别反转前 k 段和后 n-k 段,即可完成右旋。
解法 1:三次反转
先反转全部字符,再恢复旋转后两段各自的内部顺序。
时间复杂度
O(n)
空间复杂度
O(n),字符数组与返回字符串
java
final class Solution {
public String rightRotate(String s, int k) {
if (s.isEmpty()) return s;
char[] chars = s.toCharArray();
k = Math.floorMod(k, chars.length);
reverse(chars, 0, chars.length - 1);
reverse(chars, 0, k - 1);
reverse(chars, k, chars.length - 1);
return new String(chars);
}
private void reverse(char[] chars, int left, int right) {
while (left < right) {
char temporary = chars[left];
chars[left++] = chars[right];
chars[right--] = temporary;
}
}
}先反转全部字符,再恢复旋转后两段各自的内部顺序。
边界与易错点
- k 应先对字符串长度取模;空字符串必须在取模前直接返回。
- 这是 KamaCoder 55,不应映射成 LeetCode 题号。
整理来源
由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。
easy/QK55_Krotate.java