344. 反转字符串
原地反转,思路很简单,左右指针分别指在首尾,然后交换,移动指针。
public void reverseString(char[] s) {
int l = 0;
int r = s.length-1;
char temp;
while(l<r){
temp = s[l];
s[l]=s[r];
s[r]=temp;
l++;
r--;
}
}
541. 反转字符串 II
关键在于切片,其实每次是对2k的元素操作,所以每次可以让l+=2*k;再就是处理最后的元素时如果不满k个,则剩余的反转,可以用Math.min(r,n-1)
class Solution {
public String reverseStr(String s, int k) {
char[] cs = s.toCharArray();
int n = s.length();
for(int l = 0;l<n;l+=2*k){
int r = l+k-1;
reverse(cs,l,Math.min(r,n-1));
}
return String.valueOf(cs);
}
public void reverse(char[] cs,int l,int r){
while(l<r){
char c = cs[l];
cs[l]=cs[r];
cs[r]=c;
l++;r--;
}
}
}