zoukankan      html  css  js  c++  java
  • Leetcode刷题笔记

    替换空格

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

    示例 1:

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

    限制:

    0 <= s 的长度 <= 10000

    我的思路:

    用find函数找到空格在字符串中的位置,再用replace函数将空格替换为“20%”。

    C++代码如下:

    class Solution {
    public:
        string replaceSpace(string s) {
            while(s.find(" ")<s.size()){
                s.replace(s.find(" "),1,"%20");
            }
            return s;
        }
    };

    其他参考思路:

    字符数组
    由于每次替换从 1 个字符变成 3 个字符,使用字符数组可方便地进行替换。建立字符数组地长度为 s 的长度的 3 倍,这样可保证字符数组可以容纳所有替换后的字符。

    获得 s 的长度 length
    创建字符数组 array,其长度为 length * 3
    初始化 size 为 0,size 表示替换后的字符串的长度
    从左到右遍历字符串 s
    获得 s 的当前字符 c
    如果字符 c 是空格,则令 array[size] = '%',array[size + 1] = '2',array[size + 2] = '0',并将 size 的值加 3
    如果字符 c 不是空格,则令 array[size] = c,并将 size 的值加 1
    遍历结束之后,size 的值等于替换后的字符串的长度,从 array 的前 size 个字符创建新字符串,并返回新字符串

    复杂性分析

    • 时间复杂度:O(n)。遍历字符串 s 一遍。
    • 空间复杂度:O(n)。额外创建字符数组,长度为 s 的长度的 3 倍。

    解题思路2:在 Python 和 Java 等语言中,字符串都被设计成不可变的类型,即无法直接修改字符串的某一位字符,需要新建一个字符串实现。

    Python 解法流程:

    初始化一个 list ,记为 res ;
    遍历列表 s 中的每个字符 c :
    当 c 为空格时:向 res 后添加字符串 "%20";
    当 c 不为空格时:向 res 后添加字符 c ;
    将列表 res 转化为字符串并返回。

    Java 解法流程:

    初始化一个 StringBuilder ,记为 res ;
    遍历字符串 s 中的每个字符 c :
    当 c 为空格时:向 res 后添加字符串 "%20";
    当 c 不为空格时:向 res 后添加字符 c ;
    将 res 转化为 String 类型并返回。
    复杂度分析
    时间复杂度 O(N): 遍历使用 O(N) ,每轮添加(修改)字符操作使用 O(1) ;
    空间复杂度 O(N) : Python 新建的 list 和 Java 新建的 StringBuilder 都使用了线性大小的额外空间。

  • 相关阅读:
    ArcEngine:GP使用!没道理的错误!
    XMLHttpRequest的亲密接触(1)——简单讲解
    XMLHttpRequest的亲密接触(2.2)——表单提交
    初入Ajax,需要明确的Web工作原理
    文章收藏明细
    【备忘】Oracle10g 创建、删除表空间、创建、授权用户
    proxool的使用总结
    Java操作压缩与解压缩
    解决jquery ui dialog中调用datepicker时日期选择控件被遮挡的问题
    如何读取jar包中的xml等资源文件
  • 原文地址:https://www.cnblogs.com/Weems/p/12471014.html
Copyright © 2011-2022 走看看