字符串中的空格替换


  • 题目描述:

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

  • 分析:

  首先,还是想到简单、原始的方法,从头到尾扫描字符串,遇到每遇到一次空 格,先将空格之后的所有元素移动两个字节,然后将空格替换成”%20“。显然这种方法需要大量移动字符。假设字符串的长度是n,每遇到一个空格,需要移动O(n)个字符,因此对含有O(n)个空格的字符串而言,时间复杂度为O(n^2)。

  时间复杂度为O(n)的解法:

  首先遍历一次字符串,这样就可以得到字符串的长度originallength,并统计出其中空格字符的个数space,相加得到替换后的字符串长度newlength。然后定义两个指针P1、P2,分别指向原字符串的最后一个元素(注意,字符串的长度中不包含‘\0‘,但实际上它也占一位),接下来就可以向前移动指针P1,逐个把它指向的字符复制到P2指向的位置,同时也将P2向前移动一位。当碰到空格的时候,把P1向前移动一位,将“%20”插入P2之前的三位,并将P2向前移动三位。重复此过程,直到P2和P1指向同一位置时,表明所有空格都已替换完毕。

class Solution {
public:
	void replaceSpace(char *str,int length) {
        if(str == NULL || length <= 0)
            return;
        int originallength = 0;
        int space = 0;
        for(int i = 0; str[i] != ‘\0‘;++i){
            ++originallength;
            if(str[i] == ‘ ‘)
                ++space;
        }
		//将空格替换成“%20”后,每有空格,则长度比原来增加2
        int newlength = originallength + space * 2;
        if(length < newlength + 1)
            return;
        int p1 = originallength;
        int p2 = newlength;
        while(p1 >= 0 && p2 > p1){
            if(str[p1] == ‘ ‘){
                str[p2--] = ‘0‘;
                str[p2--] = ‘2‘;
                str[p2--] = ‘%‘;
            }
            else{
                str[p2--] = str[p1];
            }
            --p1;
        }
	}
};
时间: 2024-08-24 09:02:59

字符串中的空格替换的相关文章

《剑指Offer》替换空格(将字符串中的空格替换为%20)

题目: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为 We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy. 思路: 这种替换问题要考虑是否会覆盖原字符串,若是在源字符串上直接替换. 看到这个问题我觉得很多人都会想到直接从头开始替换,即遇到空格就将其替换为%20,每次都要将空格后的字符后移两个字节.这种解法的时间复杂度为O(n^2)!!! 另外一种较好的解法是从后往前替换,具体做法是从头遍历计算所有空格数,计算出总的长度. 该解

面试题5:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 注意从后向前替换,使得时间复杂度为O(n); public class Main { public static void main(String[] args) { Main main01=new Main(); String str=main01.replaceSpace(new StringBuffer("old s

将一个字符串中的空格替换为指定的内容——4

实现一个函数,将一个字符串中的所有空格替换为"%20",例如输入字符串"How beautiful you are!",输出结果应为"How%20beautiful%20you%20are!". 首先,如果另开辟一块空间并且足够将全部空格都替换成"%20",然后一个单词一个单词的拷贝过去,当遇到空格时就放进去"%20",这种低效率的方法肯定是可行的,但很显然不仅效率不高还浪费存储空间,因此,要节省空间就要在

将字符串中的空格替换为%20

------------------------------------------------------------------------------------------------------ 例如:有字符串we are family,实现后的字符串为we%20are%20family. 如果从前向后,遇空格替换空格,那么family必将向后移动两次:那么我们可以从后向前实现, 先预留足够的空间,先移动family,再移动are,遇空格填充即可. ------------------

字符串中的空格替换问题(Java版)

解决方式一:时间复杂度为O(n^2) 解决方式二:时间复杂度为O(n) 代码实现: package string; public class SpaceStringReplace2 { //len为数组大小的总容量 public static void SpaceReplace(String strOld,int len){ char[] chs =new char[len]; char[] ch = strOld.toCharArray(); for (int i = 0; i < ch.le

剑指offer 66题 -- 将一个字符串中的空格替换成“%20”

class Solution {public: void replaceSpace(char *str,int length) { //变量定义区 int newtv = 0; int oldtv = 0; int spaceNum = 0; //入参有效性判断 if( NULL == str || length <= 0) return; //计算空格数目 int i =0; while(str[i] != '\0') { oldtv++; if(str[i] == ' ') spaceNum

替换字符串中的空格

题目描述: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 输入: 每个输入文件仅包含一组测试样例. 对于每组测试案例,输入一行代表要处理的字符串. 输出: 对应每个测试案例,出经过处理后的字符串. 样例输入: We Are Happy 样例输出: We%20Are%20Happy -------------------------------------------------

(CSDN迁移)替换字符串中的空格

题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. public class Solution { public String replaceSpace(StringBuffer str) { String string = str.toString(); return string.replaceAll(" ", "%20"); }

将字符串中的空格变成%20如“we are happy ”变成“we%20are%20happy”

分析: 将字符串中的空格替换成三个字符'%','2','0': 一.创建另一个数组就太简单了,将字符串str的内容复制到新的数组中,当遇到' '时就将输出%20:如果没有空格就将原字符串中的字符复制过来就好了: 二.计算出字符串中的空格数,然后将代替后的字符串长度算出来,因为代替时会将原字符串中的字符覆盖掉,因此我们应该遍历时遇到空格就将它后面的字符向后移两位,这样就可以将%20放进去,但是由于每次遇到空格都向后移一次,那么就没有效率,因此我们可以将最后一个字符一次移到最后. 步骤是这样的: 算