题目地址(541. 反转字符串 II)
https://leetcode-cn.com/problems/reverse-string-ii/
题目描述
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。示例 1:输入:s = "abcdefg", k = 2输出:"bacdfeg"示例 2:输入:s = "abcd", k = 2输出:"bacd"提示:1 <= s.length <= 104s 仅由小写英文组成1 <= k <= 104
前置知识
公司
- 暂无
思路
在遍历字符串的过程中,只要让 i += (2 k),i 每次移动 2 k 就可以了,然后判断是否需要有反转的区间。
关键点
Java Code:
class Solution {public String reverseStr(String s, int k) {char[] chars = s.toCharArray();char temp ;int start,end;for (int i = 0; i < chars.length; i += 2 * k) {start = i;end = Math.min(start + k , chars.length)-1;while (start < end) {temp = chars[start];chars[start] = chars[end];chars[end] = temp;start ++;end--;}}return new String(chars);}}
复杂度分析
令 n 为数组长度。
- 时间复杂度:
#card=math&code=O%28n%29&id=M4rPG)
- 空间复杂度:
#card=math&code=O%28n%29&id=sBEgd)
