【微信公众号:yi极】
反转字符串 II
题目描述:
给定一个字符串 s 和一个整数 k,从字符串开头算起,每 2k 个字符反转前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
方法:
思路:
time 表示字符串反转几轮,将字符串转化成字符数组进行操作,反转第一轮时如果字符少于 k 个,则将字符全部反转,否则反转前 k 个字符,其余字符保持原样。
第一轮反转过后,time 加一,重复之前操作。
public class Solution {
/*
* 执行用时: 0 ms
* 内存消耗: 38.5 MB
* */
public static String reverseStr(String s, int k) {
int len = s.length();
int times = 1;
char [] ch = s.toCharArray();
for(int i = 0; i < len; ){
int j = Math.min(len, times*2*k);
int dis = j - i;
if (dis < k){
reverse(ch, i, j-1);
} else {
reverse(ch, i, i+k-1);
}
times++;
i = j;
}
return String.valueOf(ch);
}
private static void reverse(char[] ch, int start, int end) {
int i = start;
int j = end;
while(i < j){
char temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
i++;
j--;
}
}
}
注意:Java中valueof()的使用
valueof()方法可将基本数据类型转换成 String类型,有下列几种:
String.valueOf(boolean b) //将 boolean 变量 b 转换成字符串
String.valueOf(char c) //将 char 变量 c 转换成字符串
String.valueOf(char[] data) //将 char 数组 data 转换成字符串
String.valueOf(double d) //将 double 变量 d 转换成字符串
String.valueOf(float f) //将 float 变量 f 转换成字符串
String.valueOf(int i) //将 int 变量 i 转换成字符串
String.valueOf(long l) //将 long 变量 l 转换成字符串
String.valueOf(Object obj) //将 obj 对象转换成 字符串, 等于 obj.toString()
String.valueOf(char[] data, int offset, int count) //将字符数组data中从offset开始count长度的字符转换成字符串。
测试代码:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.printf("请输入字符串s = ");
String str = sc.nextLine();
System.out.printf("请输入整数k = ");
int num = sc.nextInt();
System.out.println(reverseStr(str, num));
}
运行结果: