剑指offer 面试题5 替换空格

问题:用“%20”替换字符串的空格(不许新创建字符串

输入:字符串

输出:替换后的字符串

思路:

首先,遍历一遍字符串,找出有多少个空格,从而确定字符串的长度。

然后,准备两个指针分别指向原字符串的末尾、替换后字符串的末尾

接着,两个指针各向左移动1一个位置,如果第一个指向原字符串的空格,则第二个指针左边插入“%”“2”“0”,指针本身向左移动3个位置。

最后,如果两个指针指向相同位置,则停止移动指针,字符串已经替换完全。

代码:

第一遍错误代码:

class Solution {
public:void replaceSpace(char *str,int length) {if(str==nullptr&&length<=0)return;int lengthOfOriginal=0;int numberOfBlank=0;int i=0;while(str[i]!='\0'){if(str[i++]==' ')numberOfBlank++;lengthOfOriginal++;}int newLength=lengthOfOriginal+numberOfBlank*2;int indexOfOriginal=lengthOfOriginal;int indexOfNew=newLength;while(indexOfOriginal>0&&indexOfOriginal

正确代码:

class Solution {
public:void replaceSpace(char str[],int length) {if(str==nullptr&&length<=0)return;int lengthOfOriginal=0;int numberOfBlank=0;int i=0;while(str[i]!='\0'){if(str[i]==' ')numberOfBlank++;lengthOfOriginal++;i++;}int newLength=lengthOfOriginal+numberOfBlank*2;if(newLength>length)return;int indexOfOriginal=lengthOfOriginal;int indexOfNew=newLength;while(indexOfOriginal>=0&&indexOfOriginal

复杂度分析:时间复杂度为O(n),未创建新的字符串实例,故空间复杂度为O(1)。

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章