代码随想录算法训练营第八天| 344.反转字符串、541. 反转字符串II、 卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串

344.反转字符串

在这里插入图片描述

题目链接: 344.反转字符串
文档讲解:代码随想录
状态:so easy

题解:

    public void reverseString(char[] s) {
        int left = 0, right = s.length - 1;
        char temp = s[0];
        while (left <= right) {
            temp = s[left];
            s[left] = s[right];
            s[right] = temp;
            left++;
            right--;
        }
    }

541. 反转字符串II

在这里插入图片描述

题目链接: 541. 反转字符串II
文档讲解:代码随想录
状态:so easy

思路:每次选取2k个字符,翻转前k个,如果剩余长度不足 k,则反转剩余部分

    public String reverseStr(String s, int k) {
        // 将字符串转换为字符数组
        char[] chars = s.toCharArray();
        int i = 0;

        // 遍历字符数组,按规则进行反转
        while (i < s.length()) {
            // 反转从i到i+k-1的字符,如果剩余字符不足k个,则反转到字符串末尾
            reverse(chars, i, Math.min(i + k, s.length()) - 1);
            // 跳过下一个k个字符
            i += 2 * k;
        }
        // 将字符数组转换为字符串并返回
        return new String(chars);
    }
    
    public void reverse(char[] chars, int start, int end) {
        // 反转指定范围的字符
        while (start <= end) {
            char temp = chars[start];
            chars[start] = chars[end];
            chars[end] = temp;
            start++;
            end--;
        }
    }

卡码网:54.替换数字

在这里插入图片描述

题目链接: 卡码网:54.替换数字
文档讲解:代码随想录
状态:so easy

题解:

    public String replace(String s) {
        char[] chars = s.toCharArray();
        StringBuilder sb = new StringBuilder();
        for (char c : chars) {
            sb.append(Character.isDigit(c) ? "number" : c);
        }
        return sb.toString();
    }

151.翻转字符串里的单词

在这里插入图片描述

题目链接: 151.翻转字符串里的单词
文档讲解:代码随想录
状态:还可以

双指针题解:

public String reverseWords(String s) {
        // 去掉字符串两端的空格并将其转换为字符数组
        char[] chars = s.trim().toCharArray();
        // front 和 rear 初始化为字符数组的最后一个位置
        int front = chars.length - 1;
        int rear = chars.length - 1;
        // 用于存储结果字符串
        StringBuilder sb = new StringBuilder();

        // 从后向前遍历字符数组
        while (front >= 0) {
            // 找到当前单词的起始位置
            while (front >= 0 && chars[front] != ' ') {
                front--;
            }
            // 将单词添加到 StringBuilder 中,并在末尾添加一个空格
            sb.append(chars, front + 1, rear - front).append(' ');
            // 跳过单词之间的空格
            while (front >= 0 && chars[front] == ' ') {
                front--;
            }
            // 更新 rear 到下一个单词的末尾
            rear = front;
        }

        // 将结果转换为字符串并去掉末尾多余的空格
        return sb.toString().trim();
    }

使用split+正则:

    public String reverseWords(String s) {
        // 使用StringBuilder构建最终结果
        StringBuilder sb = new StringBuilder();
        // 使用正则表达式分割字符串为单词数组
        String[] strings = s.split("\\s+");
        // 从数组末尾开始,遍历单词并添加到StringBuilder中
        for (int i = strings.length - 1; i >= 0; i--) {
            sb.append(strings[i]).append(' ');
        }
        // 去除StringBuilder末尾的空格并返回结果字符串
        return sb.toString().trim();
    }

卡码网:55.右旋转字符串

在这里插入图片描述

题目链接: 55.右旋转字符串
文档讲解:代码随想录
状态:so easy

题解:

    // 定义一个名为rightHand的方法,该方法接受一个字符串s和一个整数k作为参数
    public String rightHand(String s, int k) {
        // 创建一个StringBuilder对象用于构建新的字符串
        StringBuilder sb = new StringBuilder();
        // 将字符串s转换为字符数组
        char[] chars = s.toCharArray();
        // 使用StringBuilder的append方法,先截取字符数组chars的最后k个字符
        // 然后截取字符数组chars的前chars.length - k个字符,并将它们拼接起来
        sb.append(chars, chars.length - k, k).append(chars, 0, chars.length - k);
        // 返回拼接后的字符串
        return sb.toString();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值