题目
思路
反转字符串,可以理解为将第i个字符与len-i个字符进行交换,只需进行前半部分的交换即可反转整个字符串,数组需要注意下标的问题。
代码
class Solution {
public void reverseString(char[] s) {
int len = s.length;
for (int i = 0; i < len/2; i++) {
char temp = s[i];
s[i] = s[len-1-i];
s[len-1-i] = temp;
}
}
}
题目
思路
创建一个新的空字符串s_new,每次向该字符串中加入k个字符,奇数次添加这k个字符的逆序,偶数次添加原序。最后剩余字符串不满足k个时,跳出循环,判断上次添加是奇数还是偶数,如果是偶数,则表示剩余字符串少于k个,逆序加入s_new,反之正序加入。
代码
class Solution {
public String reverseStr(String s, int k) {
StringBuilder s_new = new StringBuilder();
int flag = 1;
int i = 0;
while (i + k - 1 < s.length()) {
StringBuilder temp = new StringBuilder(s.substring(i, i + k));
// 前k个进行倒序
if (flag % 2 != 0) {
temp = temp.reverse();
s_new.append(temp);
} else {
// 正序加入
s_new.append(temp);
}
flag += 1;
i += k;
}
// 由于flag是从1开始计算,假设添加完第一个2k字符串后 flag=3 则奇数表示剩余字符不足k个 需要全部反转
// 偶数表示 当前字符串原序加入
if(flag%2==0 &&i <= s.length()-1){
s_new.append(s.substring(i));
}
else {
StringBuilder temp = new StringBuilder(s.substring(i));
s_new.append(temp.reverse());
}
return s_new.toString();
}
}