题目: 请实现一个函数,把字符串的每个空格替换成%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、为了避免时间复杂度过高,我们选择从后向前进行遍历,如果不是空格将数组下标移动到该位置,是数组进行替换