题目描述:
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
时间复杂度o(n)的算法
先遍历一次字符串统计出空格的总数,计算出替换之后的字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2乘以空格数目。考虑从字符串的后面开始复制和替换。设置两个指针,P1和P2。P1指向原始字符串的末尾,而P2指向替换之后的字符串的末尾。向前移动指针P1,逐个把它指向的字符复制到P2指向的位置,直到碰到第一个空格为止。
1 int replace_blank(char a[]) 2 { 3 if( a == null ) 4 { 5 printf("exception\n"); 6 return ; 7 } 8 // 计算字符串实际长度,空格长度,替换后的字符串长度 9 int len_a=0; 10 int len_b=0; 11 int len_c=0; 12 int i=0; 13 while( a[i] != 0 ) 14 { 15 ++len_a; 16 if( a[i] == ' ' ) 17 ++len_b; 18 19 ++i; 20 } 21 len_c=len_a+2*len_b; 22 int p1=len_a; 23 int p2=len_b; 24 // p1!=p2 25 while( p1 >= 0 && p2 > p1 ) 26 { 27 if(a[p1]==' ') 28 { 29 a[p2--]='0'; 30 a[p2--]='2'; 31 a[p2--]='%'; 32 } 33 else 34 { 35 a[p2--]=a[p1]; 36 } 37 p1--; 38 } 39 return ; 40 }