标签:数组 原来 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