代码随想录算法训练营Day08|344 反转字符串,541 反转字符串II,卡码网:54.替换数字

93 阅读2分钟

LeetCode 344 反转字符串

题目链接:leetcode.cn/problems/re…

文档讲解:programmercarl.com/0344.反转字符串.…

视频讲解:www.bilibili.com/video/BV1fV…

什么时候可以使用库函数?

  • 如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。
  • 如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。

思路

要求原地,使用O(1)O(1)的额外空间修改。故考虑双指针法.

  1. 左指针起始在字符数组最左,右指针起始在字符数组最右
  2. 每轮循环交换左右指针指向的字符,左指针右移一格,右指针左移一格

LeetCode 541 反转字符串II

题目链接:leetcode.cn/problems/re…

文档讲解:programmercarl.com/0541.反转字符串I…

视频讲解:www.bilibili.com/video/BV1dT…

思路

  1. 最外层for循环每次取2k的倍数,作为一个反转区间的起始点left
  2. 判断right=i+k-1是否大于等于字符串长度
    1. 如果是,则把right置为字符串长度-1,即最后一个字符为反转区间的结束点
    2. 和344题一样双指针反转字符串
  3. 当left大于等于字符串长度,可以返回处理后的字符串

kama 54 替换数字

题目链接:kamacoder.com/problempage…

文档讲解:programmercarl.com/kamacoder/0…

思路

  1. 整个读取输入字符串为s
  2. 遍历字符串的每一个字符
    1. 如果是数字:输入“number”
    2. 如果是字母:直接输出这个字母

解答

import java.util.*;
public class Main {
    public static void main (String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        String s = scanner.next();
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if (Character.isDigit(ch)) {
                System.out.print("number");
            }
            else {
                System.out.print(ch);
            }
        } 
    }
}

今日收获总结

今日学习时长2.5小时,今天任务较轻,算是中场放松一下吧~