【剑指Offer】【字符串】5_替换数组中的空格
题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
A1:正常思路:从头到尾草庙字符串,每次碰到空格字符则把后面的字符后移2字节,再插入“%20”。时间复杂度O(n2) ===>有重复的字符被移动
A2:把从前向后替换改成从后向前替换:统计字符串中的空格数,则插入后的字符串长度为“原字符串长度 + 空格数 * 2”。得到新字符串的末尾和原字符串的末尾,逐个赋值,遇到空格则逐步插入0,2,%。 时间复杂度O(n)
class Solution {
public:
void replaceSpace(char *str,int length) {
//排除误操作
if((str != nullptr) && (length > 0))
{
int str_length = 0; //字符串实际长度
int num_blank = 0; //空格数
int i = 0;
while(str[i] != '\0')
{
//统计字符串的实际长度
str_length++;
if(str[i] == ' ')
{
num_blank++;
}
i++;
}
int new_length = str_length + num_blank * 2; //新字符串长度
//新字符串长度不能大于数组长度,否则出错
if(new_length <= length)
{
while((str_length >= 0) && (new_length > str_length))
{
if(str[str_length] == ' ')
{
str[new_length--] = '0';
str[new_length--] = '2';
str[new_length--] = '%';
}
else
{
str[new_length--] = str[str_length];
}
str_length--;
}
}
}
}
};

相关题目:
把数组B的所有数字插入数组A中,且所有数字都是排序的(从尾到投比较AB的数字,并把较大的数字复制到A中合适的位置)
删除公共字符:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
缩写:把一些长的名字或者短语进行缩写。例如"looks good to me"缩写为"lgtm",短语中的每个单词的首字母组成缩写。现在给出一个字符串s,字符串s中包括一个或者多个单词,单词之间以空格分割,请输出这个字符串的缩写。
字符串变形:对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形。首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把着个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。比如"Hello World"变形后就变成了"wORLD hELLO"。

浙公网安备 33010602011771号