LeetCode每日1题--替换空格

简介: LeetCode每日1题--替换空格

前言


算法的重要性不言而喻!区分度高!

现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。

说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!

提前入门学习书籍:CPrimerPlus、大话数据结构

image.png


刷题网站


代码随想录 (programmercarl.com)

leetcode

我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以

刷题嘛,最重要的就是坚持了!!!


画图软件


OneNote

这个要经常用,遇见不懂的流程的话就拿它画一画!


笔记软件


Typoral


题目


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

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


解析


思路1:双指针

通过题目我们知道要把字符串中的空格替换为"20%",看到字符串我们就有思路了,字符串本质就是数组中存储的对吧,那我们先把数据扩充一下,然后到空格的地方添加这个符号不就行了!

i指向新长度的末尾,j指向旧长度的末尾。

如下动图能很好说明原理:

image.png

扩充数组


//扩充空间,空格数量2倍
StringBuilder str = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
    if(s.charAt(i) == ' '){
        str.append("  ");
    }
}

有空格情况 定义两个指针

扩充完数组之后就开始替换空格为符号了,注意细节

这里我们要定义两个字符串,第一个字符串是原始字符串,第二个字符串为我们扩充后的字符串

通过倒序遍历第一个字符串,也遍历第二个字符串。当第一个字符串遇到空格的时候,就在第二个字符串的数组中开始加符号,依次类推!


//有空格情况 定义两个指针
int left = s.length() - 1;//左指针:指向原始字符串最后一个位置
s += str.toString();
int right = s.length()-1;//右指针:指向扩展字符串的最后一个位置
char[] chars = s.toCharArray();
while(left>=0){
    if(chars[left] == ' '){
        chars[right--] = '0';
        chars[right--] = '2';
        chars[right] = '%';
    }else{
        chars[right] = chars[left];
    }
    left--;
    right--;
}

完整代码如下:


public String replaceSpace(String s) {
    if(s == null || s.length() == 0){
        return s;
    }
    //扩充空间,空格数量2倍
    StringBuilder str = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        if(s.charAt(i) == ' '){
            str.append("  ");
        }
    }
    //若是没有空格直接返回
    if(str.length() == 0){
        return s;
    }
    //有空格情况 定义两个指针
    int left = s.length() - 1;//左指针:指向原始字符串最后一个位置
    s += str.toString();
    int right = s.length()-1;//右指针:指向扩展字符串的最后一个位置
    char[] chars = s.toCharArray();
    while(left>=0){
        if(chars[left] == ' '){
            chars[right--] = '0';
            chars[right--] = '2';
            chars[right] = '%';
        }else{
            chars[right] = chars[left];
        }
        left--;
        right--;
    }
    return new String(chars);
}

下面我们在补充一种方式

新建StringBuilder,遇到空格的时候就sb.append添加符号,不是空格那就添加该字符 最后将StringBuilder转换为String即可

public static String replaceSpace(String str){
        if (str == null){
            return null;
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == ' '){
                sb.append("%20");
            }else {
                sb.append(str.charAt(i));
            }
        }
        return sb.toString();
    }



相关文章
|
算法
代码随想录算法训练营第八天 | LeetCode 344.反转字符串、541. 反转字符串II、剑指Offer 05.替换空格、151.翻转字符串里的单词、剑指Offer58-II.左旋转字符串
代码随想录算法训练营第八天 | LeetCode 344.反转字符串、541. 反转字符串II、剑指Offer 05.替换空格、151.翻转字符串里的单词、剑指Offer58-II.左旋转字符串
63 0
|
Java C++
代码随想录刷题|LeetCode 344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.反转字符串里的单词 剑指Offer58-II.左旋转字符串
代码随想录刷题|LeetCode 344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.反转字符串里的单词 剑指Offer58-II.左旋转字符串
代码随想录刷题|LeetCode 344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.反转字符串里的单词 剑指Offer58-II.左旋转字符串
leetcode 剑指offer05 替换空格
leetcode 剑指offer05 替换空格
84 0
leetcode 剑指offer05 替换空格
|
算法 API
LeetCode:剑指Offer 05. 替换空格 (字符串)
题目描述:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
【LeetCode】替换空格&&消失的数字&&分割链表&&除自身以外数组的乘积
【LeetCode】替换空格&&消失的数字&&分割链表&&除自身以外数组的乘积
【LeetCode】替换空格&&消失的数字&&分割链表&&除自身以外数组的乘积
leetcode【剑指 Offer 05. 替换空格—简单】541.替换空格
leetcode【剑指 Offer 05. 替换空格—简单】541.替换空格
LeetCode 剑指 Offer 05. 替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
82 0
|
Java Python
【LeetCode每日一题】剑指 Offer 05. 替换空格(持续更新)
【LeetCode每日一题】剑指 Offer 05. 替换空格(持续更新)
185 0
|
Java
LeetCode(剑指 Offer)- 05. 替换空格
LeetCode(剑指 Offer)- 05. 替换空格
97 0
|
算法 Java C#
LeetCode刷题剑指Offer05-简单-替换空格
LeetCode刷题剑指Offer05-简单-替换空格
136 0
LeetCode刷题剑指Offer05-简单-替换空格