题目 给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大
题目
给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。 如果剩余字符少于 k 个,则将剩余字符全部反转。 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。 示例: 输入: s = "abcdefg", k = 2输出: "bacdfeg"
思路:
规则有很多,其一,每隔2k字符,前k个字符进行反转;其二,剩余字符如果小于2k但大于等于k,反转前k个其三,剩余字符小于k的,全部反转。根据这三个规则,我们考虑对字符串数组进行遍历,因为本字符串都是每隔2k个字符进行操作,所以用for循环遍历可以考虑每次增加2k个。一步一步的写,如果不知道判断条件如何处理边界,可以手动代入一个例子去解释。
class Solution { public String reverseStr(String s, int k) { char[] ch = s.toCharArray(); //将字符串转变为字符串数组 //1、每隔2k个字符,前k个字符进行反转 for(int i = 0; i < ch.length; i += (2*k)){ //2、剩余字符小于2k但大于等于k个,则反转前k个 if(i + k <= ch.length){ reverse(ch, i, i + k - 1); continue; } //3、剩余字符少于k个,则将剩余字符全部反转 reverse(ch, i, ch.length - 1); } return new String(ch); } //定义翻转函数 public void reverse(char[] ch, int i, int j){ for(; i < j; i++, j--){ char temp = ch[i]; ch[i] = ch[j]; ch[j] = temp; } } }