剑指offer——空格替换

来源:互联网 发布:四维星软件多少钱 编辑:程序博客网 时间:2024/06/05 17:22

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

分析:我们首先能想到的是最简单最直接的方法就是遍历这个字符串数组,判断是否是空格,如果是空格,则进行替换;想法则继续遍历。但是这种方法有一个最大的弊端,e就是这种算法的时间复杂度相当高,是O(n^2),这样的算法是不可取的,虽然简单,但是时间复杂度如此大,是不利于整个程序的进行的。

所以我们将采用另一种方法进行分析,替换,下面举例说明插入情况:

public static void ReplaceBlank(char string[],int length){if(string==null||length<=0){return;}int orginblank=0;/*orginblank为字符串数组的初始长度*/int numblank=0;/*numblank为空白格的个数*/for(int i=0;string[i]!='\0';i++){orginblank++;if(string[i]==' '){numblank++;}}/*下面展示替换空格后的长度*/int newlength=orginblank+numblank*2;if(newlength>length){return;}int j=newlength;for(int i=length;i>=0;i--){if(string[i]!=' '){string[j--]=string[i];}else{string[j--]='0';string[j--]='2';string[j--]='%';}}}
1、我们应该定义orgionblank和numblank,作为软件的起始大小还有空格数

2、定义newlength,是替换成%20后的数组长度,起始的空格有一个占位,现在再添加两个位置即可完成插入操作。

3、为了避免时间复杂度过高,我们选择从后向前进行遍历,如果不是空格将数组下标移动到该位置,是数组进行替换

原创粉丝点击