【Leetcode -- 剑指OfferDay03 -- 字符串】

剑指Offer Day03

重点:操作字符串

在这里插入图片描述

剑指 Offer 05. 替换空格

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

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ti-huan-kong-ge-lcof

第一反应:

return s.replaceAll(" ","%20");

考虑到.replaceAll() 不能用

用StringBuilder生成一个新的字符串

class Solution {
    public String replaceSpace(String s) {
        StringBuilder str = new StringBuilder();
        for (char c : s.toCharArray()) {
            if (c == ' ') {
                str.append("%20");
            }else {
                str.append(c);
            }
        }
        return str.toString();
    }
}

很简单
用String类里的toCharArray()得到字符数组,遍历数组内各个字符,碰见空格就当成%20加上。

剑指 Offer 58 - II. 左旋转字符串

把字符串前面的若干个字符转移到字符串的尾部

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

https://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof

重点:
字符数组是从0开始:

  1. 保留 [n , s.length() ]
  2. [0 , n)放到后面

注意: 被转移的是 从0开始,到 n-1个字符,不包含 第n 个)

1. 用substring截取重新拼接

class Solution {
    public String reverseLeftWords(String s, int n) {
       return s.substring(n) + s.substring(0, n);
    }
}

在这里插入图片描述

2. 通过字符数组获取字符拼接:
同样,可以使用遍历字符数组的方式,但效率低下:

class Solution {
    public String reverseLeftWords(String s, int n) {
        StringBuilder str = new StringBuilder();
        for (int i = n; i < s.toCharArray().length; i++) {
            str.append(s.toCharArray()[i]);
        }
        for (int i = 0; i < n; i++) {
            str.append(s.toCharArray()[i]);
        }
        return str.toString();
    }
}

提交结果:
在这里插入图片描述
3. 使用charAt获取字符

class Solution {
    public String reverseLeftWords(String s, int n) {
        StringBuilder str = new StringBuilder();
        for (int i = 0; i < s.toCharArray().length - n; i++) {
            str.append(s.charAt(n + i));
        }
        for (int i = 0; i < n; i++) {
            str.append(s.charAt(i));
        }
        return str.toString();
    }
}

效率同样很低:
在这里插入图片描述

总结

Day03 两道题都是针对字符串的,实际上考察的还是对String的熟悉程度。
比如:

  • 内部是一个字符数组
  • toArray可以得到字符数组,charAt获取指定下标字符
  • 还有对于substring的理解使用,只有start则会默认end为最后一个字符,指定startend包含start不包含end
  • 对于范围内的数据的在数组中的查找获取,从多少开始,从多少结束,要拎得清。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上岸撒尿的鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值