反转字符串 II
方法 1:暴力
我们直接翻转每个 2k 字符块。
每个块开始于 2k 的倍数,也就是 0, 2k, 4k, 6k, …。需要注意的一件是:如果没有足够的字符,我们并不需要翻转这个块。
为了翻转从 i 到 j 的字符块,我们可以交换位于 i++ 和 j-- 的字符。
解答:
package algorithm;
import java.util.Scanner;
/**
* 反转字符串 II
* @author 周聪
*
*/
public class algorithm_2 {
public String reverseStr(String s, int k) {
char[] a = s.toCharArray();// 将字符串转化为字符数组
for (int start = 0; start < a.length; start += 2 * k) {// start=start+2*k
int i = start, j = Math.min(start + k - 1, a.length - 1);// 比较两个数大小返回较小的那个数值
while (i < j) {
char tmp = a[i];
a[i++] = a[j];
a[j--] = tmp;
}
}
return new String(a);
}
public static void main(String args[]) {
algorithm_2 a = new algorithm_2();
Scanner sc = new Scanner(System.in);
System.out.println("s:");
String s = sc.nextLine();
System.out.println("k:");
int k = sc.nextInt();
System.out.println(a.reverseStr(s, k));
}
}