首页
学习
活动
专区
圈层
工具
发布

剑指offer - 替换空格 - JavaScript

题目描述: 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为 We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy。...题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为 We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy。..."); }; 解法 2:双指针 因为字符串是不可变的,所以如果直接采用从头到尾遍历原字符串检查空格,并且做替换。...那么每次检查到空格后,都需要重新生成字符串。整个过程时间复杂度是 O(N^2)。 优化的关键:提前计算替换后的字符串的长度,避免每次都对字符串做改动。...整体思路如下: 遍历原字符串,统计空格和非空格字符个数,计算替换后的新字符的长度 准备两个指针,指针 i 指向原字符串,指针 j 指向新字符串 i 从头开始遍历原字符串 str[i]是非空格,那么将 i

57030

替换空格

剑指Offer 05.替换空格 https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/ 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。...输出:"We%20are%20happy." 思路 如果想把这道题目做到极致,就不要只用额外的辅助空间了! 首先扩充数组到每个空格替换成"%20"之后的大小。...然后从后向前替换空格,也就是双指针法,过程如下: i指向新长度的末尾,j指向旧长度的末尾。 ? 有同学问了,为什么要从后向前填充,从前向后填充不行么?..."%20"之后的大小 s.resize(s.size() + count * 2); int sNewSize = s.size(); // 从后先前将空格替换为...StringBuilder 单线程使用,比较快,选不选都行 StringBuilder sb = new StringBuilder(); //使用 sb 逐个复制 str ,碰到空格则替换

5.6K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    空格替换

    1.空格替换 来源: lintcode-空格替换 问题描述 描述 设计一种方法,将一个字符串中的所有空格替换成 %20 。...你的程序还需要返回被替换后的字符串的长度。...样例 对于字符串”Mr John Smith”, 长度为 13 替换空格之后,参数中的字符串需要变为”Mr%20John%20Smith”,并且把新长度 17 作为结果返回。...挑战 在原字符串(字符数组)中完成替换,不适用额外空间 解决思路 这道题的暴躁版本呢,就是依次遍历,当遇到空格时,将空格后的字符依次后移两位,这样就腾出了3个空位,插入%20即可。...以i遍历原字符串,当i位置字符不等于空格,令j位置=i位置,如果i位置为空格,则给j,j-1,j-2位置依次放置0,2,%。 当i<0时停止循环。

    3.1K50

    替换空格

    题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。      ...我们可以先遍历一次字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2乘以空格数目。...(b)依次复制字符串的内容,直至第一个指针碰到第一个空格。(c)把第一个空格替换成'%20',把第一个指针向前移动1格,把第二个指针向前移动3格。(d)依次向前复制字符串中的字符,直至碰到空格。...21 /*newLength 为把空格替换成'%20'之后的长度*/ 22 int newLength = originalLength + numberOfBlank * 2;...numberOfBlank; 21 22 ++ i; 23 } 24 25 /*newLength 为把空格替换成'%20'之后的长度*/ 26 int

    3.7K60

    空格替换

    描述 设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。 你的程序还需要返回被替换后的字符串的长度。...样例 对于字符串 "Hello World" , 长度为 11 替换空格之后,参数中的字符串需要变为 "Hello%20World",并且把新长度 17 作为结果返回。...思路 循环遍历字符数组 碰到空字符则将空字符后所有的字符向后移动两位(假设字符数组有足够长度),防止添加 %20 时,造成覆盖而导致数据丢失....将空字符以及后两位共 3 个位置 替换成 %20 将字符数组的长度 +2 代码 public int replaceBlank(char[] string, int length) {...碰到空格要将字符数组的所有字符整体向后移动两位。 LintCode:空格替换

    3.4K80

    牛客网-替换空格

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。...解题1,不考虑时间空间复杂度,暴力解题 暴力的解题思路很简单,你可能会想到:有空格的时候直接换成"%20"就行了呗。...题目是替换空格,那就是在原来的基础上进行替换,而不是重新组合。 来自比特蛋哥: //字符串操作问题 //解决思路: //虽然是替换问题,但是生成的字符串整体变长了....//因替换内容比被替换内容长,所以,一定涉及到字符串中字符的移动问题 //移动方向一定是向后移动,所以现在的问题无非是移动多少的问题 //因为是 ' ' -> "%20",是1换3,所以可以先统计原字符串中空格的个数...if(str.charAt(old_end)==' '){ //就从当前空格的位置往后移动进行替换

    1.1K20

    【剑指Offer】替换空格

    题目: 请实现一个函数,把字符串 s 中的每个空格替换成”%20”。 示例 1: 输入:s = "We are happy." 输出:"We%20are%20happy."...题解: 方法一: 简单粗暴,直接用 replaceAll(),替换字符串中的空格为 %20 class Solution { public String replaceSpace(String...s) { return s.replaceAll(" ","%20"); } } 但是,显然这种已经有的方法不是面试官想要得到的答案,所以你得另寻方法,自己写个方法,如果写不出,那肯定给面试官不能留下一个好的印象...方法二: 创建一个新的字符数组 StringBuilder(),名为 str; 遍历字符串中的每一个字符 当 st 为空格的时候,向 str 中加入 %20; 当 st 不为空格的时候,则加入st。...for (Character st : s.toCharArray()) { if (st == ' ') { str.append("%20

    86510

    从后往前替换空格

    题目描述 将一个字符串中的空格替换成 “%20”。 Input: "A B" Output: "A%20B" 解题思路 ① 在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。...因为一个空格要替换成三个字符(%20),所以当遍历到一个空格时,需要在尾部填充两个任意字符。 ② 令 P1 指向字符串原来的末尾位置,P2 指向字符串现在的末尾位置。...P1 和 P2 从后向前遍历,当 P1 遍历到一个空格时,就需要令 P2 指向的位置依次填充 02%(注意是逆序的),否则就填充上 P1 指向字符的值。...replaceSpace(StringBuilder str) { //P1指向原来的末尾 int P1 = str.length() - 1; //有一个空格...%20,否则把P1指向的内容往后挪 while (P1 >= 0 && P2 > P1) { char c = str.charAt(P1--);

    1.4K20
    领券