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
    }
    }
posted @ 2026-01-21 20:40  whq001  阅读(2)  评论(0)    收藏  举报