LeetCode 力扣官方题解 | 541. 反转字符串II
文章插图
力扣 541.反转字符串 II「链接」(点击查看题目)
题目描述
给定一个字符串 s 和一个整数 k , 你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转 。
- 如果剩余字符少于 k 个 , 则将剩余字符全部反转 。
- 如果剩余字符小于 2k 但大于或等于 k 个 , 则反转前 k 个字符 , 其余字符保持原样 。
输入: s = "abcdefg", k = 2输出: "bacdfeg"
提示:- 该字符串只包含小写英文字母 。
- 给定字符串的长度和 k 在 [1, 10000] 范围内 。
暴力
算法和想法
【LeetCode 力扣官方题解 | 541. 反转字符串II】我们直接翻转每个 2k 字符块 。
每个块开始于 2k 的倍数 , 也就是 0, 2k, 4k, 6k, ... 。 需要注意的一件是:如果没有足够的字符 , 我们并不需要翻转这个块 。
为了翻转从 i 到 j 的字符块 , 我们可以交换位于 i++ 和 j-- 的字符 。
Python 实现
class Solution(object):def reverseStr(self, s, k):a = list(s)for i in xrange(0, len(a), 2*k):a[i:i+k] = reversed(a[i:i+k])return "".join(a)
Java 实现class Solution {public String reverseStr(String s, int k) {char[] a = s.toCharArray();for (int start = 0; start < a.length; start += 2 * k) {int i = start, j = Math.min(start + k - 1, a.length - 1);while (i < j) {char tmp = a[i];a[i++] = a[j];a[j--] = tmp;}}return new String(a);}}
复杂度分析- 时间复杂度:O(N) , 其中 N 是 s 的大小 。 我们建立一个辅助数组 , 用来翻转 s 的一半字符 。
- 空间复杂度:O(N) , a的大小 。
声明:本文归“力扣”版权所有 , 如需转载请联系 。
推荐阅读
- iQOO 7官方美图赏:三种配色、速度美学设计传承
- 虾米音乐宣布关停:网友集体泪奔
- 新荣耀拿下高通5G!联发科官方回应:正在评估
- Mac官方应用商店迎来10周岁生日
- 虾米音乐歌单可导入QQ音乐、网易云音乐 方法这
- 微软官方数据恢复工具即将更新:更易于上手 优化恢复性能
- Intel官方偷跑游戏显卡:台积电6nm工艺
- 官方:小米手机适配海量充电器 第三方不兼容可随时反馈
- 小米11官方公开内部结构,轻薄机身都藏了什么?
- 虾米音乐宣布:永别