344.反转字符串
public void reverseString(char[] s) {
int len = s.length;
int left = 0, right = len - 1;
while (left < right) {
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
``
541. 反转字符串II
public String reverseStr(String s, int k) {
int len = s.length();
int start = 0;
char[] chars = s.toCharArray();
while(start < len){
if (start+k < len){
//k ~2k
reverseString2(chars,start,start+k-1);
}else {
//0~k
reverseString2(chars,start,len-1);
}
start += 2*k;
}
return String.valueOf(chars);
}
public void reverseString2(char[] s,int left,int right) {
while (left < right) {
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
剑指Offer 05.替换空格
public String replaceSpace(String s) {
StringBuilder sb = new StringBuilder();
for (char c:s.toCharArray()){
if (c == ' '){
sb.append("%20");
}else {
sb.append(c);
}
}
return sb.toString();
}
151.翻转字符串里的单词
public String reverseWords(String s) {
char[] chars = s.toCharArray();
StringBuilder sb = new StringBuilder();
int right = s.length()-1;
while (chars[right] == ' ') right--;
while (right>=0){
if (chars[right] != ' '){
int end = right;
while (right>=0 && chars[right] != ' ') right--;
sb.append(String.copyValueOf(chars,right+1,end-right));
}else if (chars[right] == ' '){
while (right>=0 && chars[right] == ' ') right--;
sb.append(' ');
}
}
//去掉头部空格
if (sb.charAt(sb.length()-1) == ' ') sb.deleteCharAt(sb.length()-1);
return sb.toString();
}
剑指Offer58-II.左旋转字符串
为尽量高的效率,不能使用字符串拼接
public String reverseLeftWords(String s, int n) {
char[] chars = s.toCharArray();
StringBuilder sb = new StringBuilder();
return sb.append(Arrays.copyOfRange(chars,n,s.length())).append(Arrays.copyOf(chars,n)).toString();
}