344.反转字符串
题目链接:. - 力扣(LeetCode)
思路:交换两个字符,用双指针
左一个 l ,右一个 r ,让他们同时向中间靠近,while(l<r){ xxxxxx; l++;r--;}
交换两个数有三种方法:
//交换a,b;
int c;
c = a;
a = b;
b = c;
a = a^b;
b = a^b;
c = a^b;
a = a+b;
b = a-b;
a = a-b;
要理解库函数的原理,比如第三题,replace的底层是怎么实现的
541. 反转字符串II
题目链接:. - 力扣(LeetCode)
思路:模拟题,for循环进行操作,i+=2*k,进行遍历,如果最后小于k,反转最后那段.
反转用while(l<r){xxxxxx; l++;r--}
分情况写出r即可
卡码网:54.替换数字
题目链接:54. 替换数字(第八期模拟笔试)
思路:把数字字符替换成字符串,可以用Java的replace实现,因为String不能修改,所以借助StringBuilder,遍历原字符串将目标字符串append到StringBuilder里
不借助库函数,从基础实现,面试会问你用过那个字符串处理函数,然后会让你说它是怎么实现的,如果平时多练,到时候可以答上来.
Java可以新建一个字符数组 (长度通过记算数字数目) ,用str.arraycopy操作,将源字符串放到新字符数组里面,可以规定原数组开始下标,复制到新数组下标的位置,复制长度.
然后用双指针,对字符数组进操作,一个指针指在有字符的位置,另一个指在末尾,从后往前填充,
for(int i=s.length()-1,j = s.length()+5*count-1;i<j;i--,j--){
if(Character.isDigit(newS[i])){
newS[j] = 'r';
newS[j-1] = 'e';
newS[j-2] = 'b';
newS[j-3] = 'm';
newS[j-4] = 'u';
newS[j-5] = 'n';
j-=5;
}else{
newS[j]= newS[i];
}
}