标签:high arr 反转 II 算法 low 字符串 2k
目录
反转字符串II
描述
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1
输入:s = "abcdefg", k = 2 输出:"bacdfeg"
示例 2
输入:s = "abcd", k = 2 输出:"bacd"
提示
- s 仅由小写英文组成
方法:递归
我们假设数组为arr,每次处理区间[low,high)之间的元素,然后更新low=low+2k, high=high+2k。
首先我们从区间[0,k)开始处理(此时low=0,high=k),处理的规则如下:
- 若low>=arr.length,则越界了,直接返回
- 若low<arr.length&&high<=arr.length,则将[low,high)区间内的元素反转,并递归处理[low+2k,high+2k)
- 若low<arr.length&&high>arr.length,则将[low,arr.length)区间内的元素反转,并结束递归
class Solution {
public String reverseStr(String s, int k) {
char[] reverse = reverse(s.toCharArray(), 0, k);
return new String(reverse);
}
public char[] reverse(char[] arr, int low, int high){
if (low>=arr.length) return arr;//如果越界了直接返回
else if (high<=arr.length){//对s[low,high)之间的字符进行反转
for (int i = low; i < (high+low)/2; i++) {
char temp=arr[i];
arr[i]=arr[high-(i-low+1)];
arr[high-(i-low+1)]=temp;
}
int k=high-low;
arr=reverse(arr,low+2*k,high+2*k);//对下一组进行反转
}else{//对s[low,len)之间的字符进行反转,之后就结束
for (int i = low; i < (arr.length+low)/2; i++) {
char temp=arr[i];
arr[i]=arr[arr.length-(i-low+1)];
arr[arr.length-(i-low+1)]=temp;
}
}
return arr;
}
}
标签:high,arr,反转,II,算法,low,字符串,2k 来源: https://blog.csdn.net/weixin_39478524/article/details/120935646
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。