前言:字符串部分还是比较简单的
344.反转字符串
链接:https://leetcode.cn/problems/reverse-string/description/
思路:这个比较简单,因为字符串也是数组类型的,用两个指针进行交换即可。
代码如下:
class Solution {
public void reverseString(char[] s) {
int i=0,j=s.length-1;
while(i<j){
char temp=s[i];
s[i]=s[j];
s[j]=temp;
i++;
j--;
}
}
}
541. 反转字符串II
链接:https://leetcode.cn/problems/reverse-string-ii/description/
思路:该题的解题重点在于如何判断2k的区间,只需要设置一个循环,使i每次前进2k即可。
代码如下:
class Solution {
public String reverseStr(String s, int k) {
char[] ch=s.toCharArray();
for(int i=0;i<ch.length;i+=2*k){
int start=i;
int end=Math.min(i+k-1,ch.length-1);
while(start<end){
char temp=ch[start];
ch[start]=ch[end];
ch[end]=temp;
start++;
end--;
}
}
return new String(ch);
}
}
卡码网:54.替换数字
链接:https://kamacoder.com/problempage.php?pid=1064
注意:Java中字符串不允许更改,这里需要新建一个字符串。
直接新建一个字符串操作的代码如下:
import java.util.Scanner;
class Main{
public static void main (String[] args) {
Scanner in = new Scanner(System.in);
String s=in.nextLine();
StringBuilder sb =new StringBuilder();
for(int i=0;i<s.length();i++){
if(Character.isDigit(s.charAt(i))){
sb.append("number");
}else{
sb.append(s.charAt(i));
}
}
System.out.println(sb);
}
}
新建一个数组进行详细操作的代码如下:
import java.util.Scanner;
class Main{
public static void main (String[] args) {
Scanner in = new Scanner(System.in);
String s=in.nextLine();
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);
}
for(int i=s.length()-1,j=len-1;i>=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];
}
}
String sb=new String(ch);
System.out.println(sb);
}
}
代码学习:StringBuffer 和 StringBuilder 都是 Java 中用于操作字符串的类,它们提供了构建和修改字符串的能力,但两者之间存在一些关键的区别。
- StringBuffer 是线程安全的,所有的方法都是同步的,因此在多线程环境下性能较低。在多线程环境中操作字符串时,应使用 StringBuffer。
- StringBuilder 是非线程安全的,方法是非同步的,在单线程环境下性能更高。在单线程环境中操作字符串时,应使用 StringBuilder。