LeetCode 剑指 Offer 替换空格、左旋转字符串

146 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第24天,点击查看活动详情

替换空格

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例 1: 输入:s = "We are happy." 输出:"We%20are%20happy."

限制: 0 <= s 的长度 <= 10000

题目链接 leetcode.cn/problems/ti…

解题思路

这题比较简单,就是进行一个字符串替换,需要注意的是创建数组的时候,得把空间开够,因为可能出现全为空格的情况,那么需要的空间就是 3n。

操作步骤:

  1. 创建一个数组 res 用来保存新的字符串,注意数组的长度要开到 s.length() * 3这么大才行。
  2. 初始化count变量为0,这个变量用来保存当前存在于 数组n 中的字符个数。
  3. 遍历字符串 s ,遍历过程中进行下面的操作:
    1. 获取字符串s的当前字符,判断它是不是为空格
    2. 如果是空格,就让res的后三个位置为 %20 这三个字符
    3. 如果不是空格,则正常复制过去
    4. 每次给res添加字符的时候都需要注意给count++

其实更简单的做法,可以直接用replace()方法,一行代码就能解决,但这样就失去了写这道题的意义,所以在个人练习的时候不建议这样写,当然在我们笔试的时候肯定是怎么快怎么来。

代码

class Solution {
    public String replaceSpace(String s) {
        int n = s.length();
        char[] res = new char[n * 3];
        int count = 0;
        for (int i = 0;i < n ; i++){ 
            if (s.charAt(i) == ' ') {
                res[count++] = '%';
                res[count++] = '2';
                res[count++] = '0';
            }else {
                res[count++] = s.charAt(i);
            }
        }
        return new String(res, 0 , count);
    }
}

image-20221017225742136

左旋转字符串

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例 1: 输入: s = "abcdefg", k = 2 输出: "cdefgab"

示例 2: 输入: s = "lrloseumgh", k = 6 输出: "umghlrlose"

限制: 1 <= k < s.length <= 10000

题目链接 leetcode.cn/problems/zu…

解题思路

这题比较简单,就是进行一个字符串反转,把前面的一部分放到后面,操作步骤:

  1. 新建一个字符数组 res,大小至少为 s.lenght (s.lenght 记为size)
  2. 遍历字符串 s 的前 n 个字符,把它们添加到 res 的“第 size - n + i 位字符”
  3. 再遍历 s 的第n位到最后一位字符,把他们添加到 res 当中,每次存放的位置为 res[i-n]
  4. 将 res 转化为字符串并返回

代码

class Solution {
    public String reverseLeftWords(String s, int n) {
        int size = s.length();
        char[] res = new char[size];
        for (int i = 0; i < n ; i++) {
            res[size - n + i] = s.charAt(i);
        }
        for (int i = n; i < size ; i++) {
            res[i - n] = s.charAt(i);
        }
        return new String(res);
    }
}

image-20221017225834024