码迷,mamicode.com
首页 > 其他好文 > 详细

替换空格

时间:2019-04-14 16:20:33      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:数组   原来   length   info   blank   解法   clu   src   --   

题目描述

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

原来的思路是空间换时间,开一个string,遍历一次,如果是空格则拼接string+="%20",否则直接拼接原字母。

剑指offer上的解法:

技术图片
技术图片

class Solution {
public:
    void replaceSpace(char *str,int length) {
        if(str == nullptr || length <= 0) return;
        int orilength = 0;
        int numBlank = 0;
        int i = 0;
        while(str[i] != '\0'){
            ++orilength;
            if(str[i] == ' '){
                ++numBlank;
            }
            ++i;
        }
        int newlength = orilength + numBlank * 2;
        if(newlength > length) return;
        int index_Ori = orilength;
        int index_New = newlength;
        while(index_Ori >= 0 && index_New > index_Ori){
            if(str[index_Ori] == ' '){
                str[index_New--] = '0';
                str[index_New--] = '2';
                str[index_New--] = '%';
            }
            else{
                str[index_New--] = str[index_Ori];
            }
            --index_Ori;
        }
    }
};

相关题目:

技术图片

这里自己用vector实现了一下,因为要改变数组大小,思路同上,也是从后开始比较,这是解决问题的关键。

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<string>
#include<cstring>
#include<vector>
using namespace std;

void merge(vector<int> &a, int alength, vector<int> &b, int blength) {
    int newPos = alength + blength - 1;
    int a_oldPos = alength - 1;
    int b_oldPos = blength - 1;
    a.resize(newPos + 1);
    while (a_oldPos >= 0 && b_oldPos >= 0) {
        if (a[a_oldPos] > b[b_oldPos]) {
            a[newPos] = a[a_oldPos];
            a_oldPos--;
        }
        else {
            a[newPos] = b[b_oldPos];
            b_oldPos--;
        }
        newPos--;
    }
    while (a_oldPos >= 0 && newPos >= 0) a[newPos--] = a[a_oldPos];
    while (b_oldPos >= 0 && newPos >= 0) a[newPos--] = b[b_oldPos];
}

int main()
{
    vector<int> a = { 1,3,5,7,9 };
    vector<int> b = { 0,2,4,6,8 };
    merge(a, a.size(), b, b.size());
    int x=5;
    return 0;
}

替换空格

标签:数组   原来   length   info   blank   解法   clu   src   --   

原文地址:https://www.cnblogs.com/Mered1th/p/10705237.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!