class Solution {
// 344给的字符数组,所以可以直接在原来的数组中进行交换
public void reverseString(char[] s) {
int i = 0;
int j = s.length - 1;
while(i < j){
char tmp = s[i];
s[i] = s[j];
s[j] = tmp;
i++;
j--;
}
}
}
class Solution {
public String reverseStr(String s, int k) {
int length = s.length();
StringBuffer ns = new StringBuffer();
for(int i = 0; i < length; i += 2*k){
StringBuffer temp = new StringBuffer();
int start = i;
int firstK = (i + k < length) ? i + k : length ;
int secondK = (i + 2*k < length) ? i + 2*k : length;
temp.append(s.substring(start,firstK));
ns.append(temp.reverse());
if(secondK > firstK){
ns.append(s.substring(firstK,secondK));
}
}
return ns.toString();
}
}
541给的string 是不可变数组,一旦定义就不能改变,所以把原来的字符串改成字符数组或者StringBuffer来操作。
StringBuffer/StringBuilder是可变字符串。
class Solution {
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
for(int i = 0;i < ch.length;i += 2 * k){
int start = i;
// 判断尾数够不够k个来取决end指针的位置
int end = Math.min(ch.length - 1,start + k - 1);
while(start < end){
char temp = ch[start];
ch[start] = ch[end];
ch[end] = temp;
start++;
end--;
}
}
return new String(ch);
}
}
在做逻辑题时,尽量简化逻辑,合并代码,不要写得太冗余