替换空格

来源:互联网 发布:java自行车是高端的吗 编辑:程序博客网 时间:2024/05/19 22:45

题目:请实现一个函数 把字符串中的每个空格替换成“%20”,例如输入“we are happy."则输出”we%20are%20happy."


从前向后 可以遍历字符串遇到空格则将空格后的字符移动两位并替换为%20 但是这种方法时间复杂度为O(N*N)


从后向前?


遍历一遍字符串可以知道字符串中空格的个数 比如“we are happy."中 字符串长度为14(包括结尾 ‘\0')  有两个空格 那么替换后的字符串长度为14+2*2=18


可以从后向前遍历字符串 设置两个指针 一个指向 替换后的字符串末尾 另一个指向原字符串 前向遍历字符串 当当前字符不是空格 则 复制当前字符

如果当前字符是空格 则复制”%20“ 


void strsub(char s[]){int len=strlen(s);int k=0;for(int i=0;i<len;i++){if(s[i]==' ')k++;}int high=k*2+len;s[high--]='\0';int low=len-1;while(low>=0){if(s[low]==' '){s[high--]='0';s[high--]='2';s[high--]='%';low--;}else{s[high--]=s[low--];}}}
时间复杂度为O(N)



--------------------------------------------------------------------------------------

相关题目:

有两个排序的数组A1和A2 内存在A1的末尾有足够多的空余空间容纳A2 请实现一个函数 把A2中所有数字插入到A1中并且所有的数字是排序的


从后向前比较A1和A2中的数字 并把较大的数字复制到A1中合适位置


合并两个数组(包括字符串)时 如果从前向后复制每个数字(或字符)需要重复移动数字(字符)多次

可以考虑从后向前复制 这样就能减少移动的次数 从而提高效率






0 0
原创粉丝点击