替换空格:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
剑指offer替换空格:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:当我们从前往后进行替换时,每替换一个就要移动后面的所有字符,时间复杂度是0(n2)
我们可以从后向前替换,先统计出所有的空格数space_count,就能得到替换后的长度是length+2*space_count
定义两个指针(可以用下标表示),i指向替换前的最后一个字符下标,j指向替换后的最后一个字符下标
从后向前复制。
1 //请实现一个函数,将一个字符串中的每个空格替换成“%20”。 2 //例如,当字符串为We Are Happy. 3 //则经过替换之后的字符串为We%20Are%20Happy。 4 #include <iostream> 5 #include <cstring> 6 #include <cstdlib> 7 using namespace std; 8 9 10 class Solution { 11 public: 12 //思路首先找出统计所有的空格数,这样就能计算出替换后的字符串长度 13 // 然后从后向前替换 14 void replaceSpace(char *str, int length) 15 { 16 if(length <= 0 || str == nullptr) 17 return ; 18 19 int space_count = 0; 20 for(int i = 0; i < length; i++) 21 { 22 if (str[i] == ' ') 23 space_count++; 24 } 25 26 int i = length-1; //替换前最后一个字符下标 27 int j = length+space_count*2-1; // 替换后最后一个字符的下标 28 while(j >= 0) 29 { 30 if (str[i] == ' ') 31 { 32 str[j--] = '0'; 33 str[j--] = '2'; 34 str[j--] = '%'; 35 i--; 36 } 37 else 38 str[j--] = str[i--]; 39 } 40 } 41 }; 42 43 44 int main(void) 45 { 46 char str[] = "as df kls"; 47 // char str[] = "hello"和char *str = "hello"不一样 48 Solution s; 49 s.replaceSpace(str, strlen(str)); 50 return 0; 51 }