344.反转字符串
思路:两个指针指向头尾,交换,不断向中间移动。
541. 反转字符串II
思路:先把字符串转换成字符数组。遍历数组,每次跨越2k个处理区间。然后判断起始和终止节点。在区间内做交换。
每次跨越2k个区间,不用i++,用i+=2k;charAt返回的是字符,不能用来做异或操作。
class Solution {
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
for(int i = 0; i < s.length(); i += 2*k){
int left = i;
int right = i + k -1;
if(i + k < ch.length){
while(left < right){
ch[left] ^= ch[right];
ch[right] ^= ch[left];
ch[left] ^= ch[right];
right--;
left++;
}
}else{
right = ch.length-1;
while(left<right){
ch[left] ^= ch[right];
ch[right] ^= ch[left];
ch[left] ^= ch[right];
right--;
left++;
}
}
}
return new String(ch);
}
}
54.替换数字
基本思路:遍历数组,每遇到一个数字就让长度计数器加5,然后用改该长度创建数组。
把原来字符串放进去,创建两个指针,一个指向原来长度末尾,一个指向数组末尾。从后往前遍历和填字符,碰到字母填入该字母,碰到数字填入“number”。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s = sc.next();
int len = s.length();
for(int i = 0;i < s.length(); i++ ){
if(s.charAt(i) >= '0' & s.charAt(i) <= '9'){
len +=5;
}
}
char[] ch = new char[len];
for( int i = 0; i < s.length(); i++){
ch[i] = s.charAt(i);
}
int cur = len - 1;
for(int i = s.length() - 1, j = ch.length -1; j >= 0 ;i--){
if(ch[i] >= '0' && ch[i] <= '9'){
ch[j--] = 'r';
ch[j--] = 'e';
ch[j--] = 'b';
ch[j--] = 'm';
ch[j--] = 'u';
ch[j--] = 'n';
}else{
ch[j--] = ch[i];
}
}
System.out.println(ch);
}
}