题目:
给定一个字符串 s
和一个整数 k
,从字符串开头算起,每计数至 2k
个字符,就反转这 2k
字符中的前 k
个字符。
- 如果剩余字符少于
k
个,则将剩余字符全部反转。 - 如果剩余字符小于
2k
但大于或等于k
个,则反转前k
个字符,其余字符保持原样。
思路:重要的是找到要反转的部分的起始位置和终止位置。用一个for循环,每次循环跨越2K步,每次循环的i值就是反转的部分的起始位置,终止位置可以用Math.min(s.length-1,start+k-1)来表示,然后使用这两个指针进行反转字符串操作。
代码:
public String reverseStr(String s, int k) {
char[] str=s.toCharArray();
for(int i=0;i<str.length;i+=2*k){
int start=i;//起始位置
int end=Math.min(str.length-1,start+k-1);//终止位置
while(start<end){//反转字符串
char tmp=str[start];
str[start]=str[end];
str[end]=tmp;
start++;
end--;
}
}
return new String(str);
}
附加知识:char数组传换成string类型方法有4种
(1)使用 String 类的 String.valueOf(char) 方法,可以将char[] 和char 变量名转成String类型
(2)Character 类的 Character.toString(char) 方法,但该方法只能将char 变量名转成String类型
(3)使用String str = new String(charArray)
(4)通过将给定字符与空字符串连接起来,将 char 转换为 java 中的字符串对象。