题目
(leetcode.541)
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
思路
大循环:2*k
循环操作:反转前k
尤其要注意,题目有些部分没有描述清楚,当字符串剩余部分不足k时,需要反转整个剩余子串。
代码
class Solution {
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
int l = s.length();
for(int i = 0; i < l; i += 2*k) {
reverse(ch, i, Math.min(i+k, l) - 1);
}
return String.valueOf(ch);
}
public void reverse(char[] ch, int x, int y) {
char temp;
for(; x < y; x ++, y --) {
temp = ch[x];
ch[x] = ch[y];
ch[y] = temp;
}
}
}
知识点
将字符数组转化为字符串的方法:
static String valueOf(char[] ch)
new String(字符数组)
将字符串转化为字符数组的方法:
char[] toCharArray(String s)
把字符串转化为字节数组的方法:
byte[] getBytes(String s)