完整教程:java-代码随想录第七天|344.反转字符串、541.反转字符串 II、54.替换数字
目录
思路链接:代码随想录
现场面试中,什么时候用库函数,什么时候不用呢?
1.如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。
2.如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。
字符串基础知识
344.反转字符串
题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组
s
的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
题解:使用双指针。
class Solution {
public void reverseString(char[] s) {
int left=0;
int right=s.length-1;
while(left < right){
char temp=s[left];
s[left]=s[right];
s[right]=temp;
left++;
right--;
}
}
}
541.反转字符串 II
链接:541. 反转字符串 II - 力扣(LeetCode)
题目:
给定一个字符串
s
和一个整数k
,从字符串开头算起,每计数至2k
个字符,就反转这2k
字符中的前k
个字符。
- 如果剩余字符少于
k
个,则将剩余字符全部反转。- 如果剩余字符小于
2k
但大于或等于k
个,则反转前k
个字符,其余字符保持原样。
题解:在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k ,然后判断是否需要有反转的区间。要找的也就是每2 * k 区间的起点,这样写,程序会高效很多。
当需要固定规律一段一段去处理字符串的时候,要想想在for循环的表达式上做文章。
class Solution {
public String reverseStr(String s, int k) {
char[] ch=s.toCharArray();
for(int i=0;i
54.替换数字
题目:给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。
题解:java中String不能修改。每个数字字符需要替换为number,即多出5个字符的位置,根据这一点确定字符数组的长度;将字符串复制到字符数组中;从后往前,挨个检查如果为数字字符,则替换为number。
import java.util.Scanner;
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='0' && s.charAt(i)=0;i--){
if('0'<=newch[i] && newch[i]<='9'){
newch[j--] = 'r';
newch[j--] = 'e';
newch[j--] = 'b';
newch[j--] = 'm';
newch[j--] = 'u';
newch[j--] = 'n';
}else{
newch[j--]=newch[i];
}
}
System.out.println(newch);
}
}