【剑指offer】空格替换

Question

设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。

Solution 1

需要额外的一个数组:

class Solution {
public:
    /**
     * @param string: An array of Char
     * @param length: The true length of the string
     * @return: The true length of new string
     */
    int replaceBlank(char string[], int length) {
        // Write your code here
        if(string == NULL || length < 0)
            return -1;
        int ans = length;
        char tmp[1000];
        memcpy(tmp, string, ans);
        for(int i = 0; i < ans; i ++)
        {
            if(string[i] == ‘ ‘)
            {
                for(int j = i + 1; j < ans; j ++)
                {
                    string[j + 2] = tmp[j];
                }

                 string[i] = ‘%‘;
                 string[i + 1] = ‘2‘;
                 string[i + 2 ] = ‘0‘;
                 ans += 2;
                 i += 2;
                 memcpy(tmp, string, ans);
            }

        }

        return ans;
    }
};  

Solution 2

不需要额外的空间,直接在原数组里操作:

class Solution {
public:
    /**
     * @param string: An array of Char
     * @param length: The true length of the string
     * @return: The true length of new string
     */
    int replaceBlank(char string[], int length) {
        // Write your code here
        if(string == NULL || length < 0)
            return -1;

        int blank_num = 0;
        for(int i = 0; i < length; i ++)
        {
            if(string[i] == ‘ ‘)
                blank_num += 1;
        }

        int new_length = length + blank_num * 2;

        int index_new = new_length;
        int index_ori = length;
        while(index_ori >= 0 && index_new > index_ori )
        {
            if(string[index_ori] == ‘ ‘)
            {
                string[index_new--] = ‘0‘;
                string[index_new--] = ‘2‘;
                string[index_new--] = ‘%‘;
            }

            else
                string[index_new--] = string[index_ori];

            index_ori -= 1;
        }

        return new_length;

    }
};

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-21 05:13:45

【剑指offer】空格替换的相关文章

剑指offer 《替换空格》

本题来自<剑指offer> 替换空格 题目: 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路: 方案一:空间优先,在原数组的基础上进行替换,没替换一次就将后面的字符串向后挪两个位置 step1:查询空格的个数,在此基础上申请空格数两倍的位置 step2:从后面向前遍历,如果遇到空格就加入‘’02%‘’,否则就继续挪动非空格字符,直到空格遍历完.代码采用了c++编程 方案二:可申

《剑指offer》替换空格

题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. Solution: #include <iostream> using namespace std; void replaceBlank(char str[],int length) { if(str==NULL||length<0) return ; int originalLength=0; int numberOfB

剑指OFFER之替换空格

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

【剑指Offer】替换空格

题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 解题思路 遍历字符串,遇到空格,就把空格后面的所有数后移两个位置: 空格处放'%',空出来的两个位置放'2','0' 代码实现 class Solution { public: void replaceSpace(char *str, int length) { if (length <= 0 || str == N

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

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

剑指offer:替换空格

##题目:请实现一个函数,把字符串中的每个空格替换成%20.例如输入"We are happy.",则输出"We%20are%20happy.". 最容易想到的是,从头到尾扫描,每次碰到空格就替换.但是时间复杂度为o(n2). 时间复杂度为o(n)的解法是: 首先遍历字符串,统计出字符串中空格的总数,然后计算出替换之后的字符串的总长度.然后准备2个指针,P1,P2,.P1,指向原串的末尾,P2指向新串的末尾.然后向前移动,逐个把P1指向的字符复制到P2指向的位置,遇

剑指Offer 2. 替换空格 (字符串)

题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 题目地址 https://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&tqId=11155&tPage=1&rp=2&ru=%2Fta%2Fcoding-interviews&qru=%2F

剑指 Offer——2. 替换空格

题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路与实现 解法: 先遍历一遍字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串长度. 每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2*空格的数目. 我们从字符串的后面开始复制和替换,首先准备两个指针,P1和P2,P1指向原始字符串的末尾,P2指向替换之后字符串的末尾.

剑指offer系列——替换空格?

Q:请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. C:时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M T: 我这是开辟了一个新的字符串帮助,实际上如果字符串较大就并不好. 讨论区主要方法: 1.从后往前插入,这样不需要另辟新的空间. void replaceSpace(char *str,int length) { int oldlen

牛客网-《剑指offer》-替换空格

C++ 1 class Solution { 2 public: 3 void replaceSpace(char *str,int len) { 4 int cnt = 0; 5 for (int i = 0; i < len; i++) { 6 if (str[i] == ' ') cnt++; 7 } 8 int idx = len + cnt * 2 - 1; 9 for (int i = len - 1; i >= 0; i--) { 10 if (str[i] == ' ') {