344. 反转字符串-day07
题目:344. 反转字符串
题目链接:https://leetcode.cn/problems/reverse-string/description/
思路:就是将字符数组中的元素交换位置(从中间分开),例子:第1个后最后一个交换,第2个和倒数第二个交换
代码:
点击查看代码
public void reverseString(char[] s) {
int n=s.length;
for(int left=0,right=n-1;left<right;left++,right--){
char temp=s[left];
s[left]=s[right];
s[right]=temp;
}
}
题目:541. 反转字符串 II
题目链接:https://leetcode.cn/problems/reverse-string-ii/description/
思路: 题目本质:按 2k 分段,每段反转「前 k 个」或「全部剩余」字符;
3 种场景可统一为:反转范围是「当前起点 i」到「min (i+k-1, 字符串末尾)」;
代码关键:
步长 2k 遍历,避免重复处理;
用 Math.min 确定右边界,兼容所有场景;
双指针反转字符数组(效率最高)
代码:
点击查看代码
public String reverseStr(String s, int k) {
char[] arr=s.toCharArray();
int n=arr.length;
//每次跳2k个字符,分段处理
for(int i=0;i<n;i+=2*k){
int left=i;
int right=Math.min(i+k-1,n-1);//分段处理 right可以等于i+k-1,通过min函数防止越界
while(left<right){
char temp=arr[left];
arr[left]=arr[right];
arr[right]=temp;
left++;
right--;
}
}
return new String(arr);
}
**题目: 卡码网:54.替换数字 **
题目路径:https://kamacoder.com/problempage.php?pid=1064
思路:
代码功能:将字符串中的数字字符替换为 "number",非数字字符不变,输出处理后的字符串;
核心逻辑:
先计算替换后的总长度(数字 + 5);
从后往前填充字符数组,避免覆盖;
数字字符替换为 6 个字符 "rebmun"(倒序赋值实现正序);
代码:
点击查看代码
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'){ //字符在0~9之间
len+=5;//得到新数组的长度
}
}
char[] ret=new char[len];
// 核心替换逻辑
for (int i = s.length() - 1, j = len - 1; i >= 0; i--) {
char c = s.charAt(i); // 直接取原字符串字符,不用读ret数组
if (Character.isDigit(c)) {
ret[j--] = 'r';
ret[j--] = 'e';
ret[j--] = 'b';
ret[j--] = 'm';
ret[j--] = 'u';
ret[j--] = 'n';
} else {
ret[j--] = c;
}
}
System.out.println(ret);
sc.close(); // 关闭Scanner
}
}

浙公网安备 33010602011771号