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 都使用了线性大小的额外空间。

  • 相关阅读:
    CSS3 定位| Position研究
    ASP.NET中Partial Class部分类
    如何安全实现“记住我”的功能
    JavaScript后台代码操作HTML TABLE的方法
    强悍的CSS工具组合:Blueprint, Sass, Compass
    CSS的力量:用一个DIV画图
    ASP.NET记录错误日志的方式
    ASP.NET私有构造函数作用
    c#.net实现浏览器端大文件分块上传
    asp.net实现浏览器端大文件分块上传
  • 原文地址:https://www.cnblogs.com/Weems/p/12471014.html
Copyright © 2011-2022 走看看