刷题力扣541-反转字符串2
发布时间:2022-09-22 23:00:30 385
相关标签: # java# java
题目
给定一个字符串 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;
}
}
}
文章来源: https://blog.51cto.com/u_15505301/5628196
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报