代码随想录第八天

344.反转字符串

题目链接/文章讲解/视频讲解:https://programmercarl.com/0344.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2.html

思路:

通过交换字符的位置来实现字符串反转。使用两个指针,一个指向字符串的开头,另一个指向字符串的末尾,然后交换这两个指针指向的字符,然后分别向中间移动指针,直到两个指针相遇。

步骤:

  1. 创建一个函数 reverseString,接收一个字符数组 s 作为参数。

  2. 使用两个指针 startend,分别指向字符数组的开头和末尾。

  3. 进入循环,当 start < end:

    • 交换 s[start]s[end] 的值。
    • start 指针向右移动一位。
    • end 指针向左移动一位。
  4. 循环结束后,字符数组 s 中的字符串已经被反转。

  5. 返回反转后的字符数组 s

完整代码

public class Solution {
    public void reverseString(char[] s) {
        int start = 0;
        int end = s.length - 1;

        while (start < end) {
            char temp = s[start];
            s[start] = s[end];
            s[end] = temp;

            start++;
            end--;
        }
    }

    public static void main(String[] args) {
        char[] s = {'h', 'e', 'l', 'l', 'o'};
        Solution solution = new Solution();
        solution.reverseString(s);
        System.out.println(Arrays.toString(s));
    }
}

541. 反转字符串II

题目链接/文章讲解/视频讲解:https://programmercarl.com/0541.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2II.html

思路:

  1. 创建一个字符数组 chArr,将字符串 s 转换为字符数组。
  2. 使用循环遍历字符数组,每次遍历 2k 个字符。
  3. 对于每个 2k 字符的前 k 个字符,使用双指针的方法进行反转。
  4. 注意处理剩余字符的情况,如果剩余字符少于 k 个,则将剩余字符全部反转。
  5. 最后将字符数组转换回字符串并返回结果。

完整代码

public class Solution {
    public String reverseStr(String s, int k) {
        char[] chArr = s.toCharArray();

        for (int i = 0; i < chArr.length; i += 2 * k) {
            int start = i;
            int end = Math.min(i + k - 1, chArr.length - 1);

            // 反转前 k 个字符
            while (start < end) {
                char temp = chArr[start];
                chArr[start] = chArr[end];
                chArr[end] = temp;
                start++;
                end--;
            }
        }

        return new String(chArr);
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        String s = "abcdefg";
        int k = 2;
        String result = solution.reverseStr(s, k);
        System.out.println(result);
    }
}

卡码网:54.替换数字

题目链接/文章讲解:https://programmercarl.com/kama54.%E6%9B%BF%E6%8D%A2%E6%95%B0%E5%AD%97.html

思路:

  1. 创建一个StringBuilder对象,用于存储转换后的字符串。
  2. 遍历输入字符串s中的每个字符。
  3. 如果当前字符是字母,则直接将其添加到StringBuilder中。
  4. 如果当前字符是数字,则将"number"添加到StringBuilder中。
  5. 将StringBuilder转换为字符串并返回结果。

完整代码

public class Solution {
    public String replaceDigits(String s) {
        StringBuilder sb = new StringBuilder();

        for (char c : s.toCharArray()) {
            if (Character.isLetter(c)) {
                sb.append(c);
            } else if (Character.isDigit(c)) {
                sb.append("number");
            }
        }

        return sb.toString();
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        String s = "a1b2c3";
        String result = solution.replaceDigits(s);
        System.out.println(result);
    }
}

151.翻转字符串里的单词

题目链接/文章讲解/视频讲解:https://programmercarl.com/0151.%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.html

思路:

  1. 使用trim()方法去除输入字符串s的前导和尾随空格。
  2. 将字符串s按照空格分割成单词数组。
  3. 创建一个StringBuilder对象,用于存储反转后的结果。
  4. 从单词数组的最后一个单词开始遍历,将每个单词添加到StringBuilder中,并在单词之间添加一个空格。
  5. 将StringBuilder转换为字符串并返回结果。

完整代码

public class Solution {
    public String reverseWords(String s) {
        // 去除前导和尾随空格
        s = s.trim();
        
        // 按照空格分割成单词数组
        String[] words = s.split("\\s+");
        
        StringBuilder sb = new StringBuilder();
        
        // 从最后一个单词开始遍历
        for (int i = words.length - 1; i >= 0; i--) {
            sb.append(words[i]);
            if (i != 0) {
                sb.append(" ");
            }
        }
        
        return sb.toString();
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        String s = "the sky is blue";
        String result = solution.reverseWords(s);
        System.out.println(result);
    }
}

不使用库函数未整理完

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

题目链接/文章讲解:

https://programmercarl.com/kama55.%E5%8F%B3%E6%97%8B%E5%AD%97%E7%AC%A6%E4%B8%B2.html

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值