【剑指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"。

 

posted @ 2019-08-25 04:10  XieXinBei0318  阅读(256)  评论(0编辑  收藏  举报