题目:
请实现一个函数,把字符串中的每个空格替换成“%20”,例如输入“Hello World” ,输出“Hello%20World
输入:
Hello World
输出:
Hello%20World
实现思路:
一般我们可以用遍历的方法来实现,但是字符串较长时会出现大规模的移动,其次时间复杂度为O(N的2次方)。我们可以有更好的方法,就是计算出 空格后字符的容量,然后声明两个指针,一个指针指向老字符的末尾,一个指向计算容量后声明的新字符的指针的末尾,老字符的指针在没有等于0之前,一直向前移动并且复制字符到新字符的指针上,遇到空格,则新指针复制空格。
Java 代码实现:
<pre name="code" class="html">public static void main(String[] args) {
// TODO Auto-generated method stub
String str="hello world";
replaceBlank(str);
}
public static void replaceBlank(String str ){
if(str.equals("") && str.length()==0)
return;
int listSize=str.length();
int spaceSize=0;
for(int i=0;i<str.length();i++){
String temp=String.valueOf(str.charAt(i));
if(temp.equals(" "))
++spaceSize;
}
// 没有空格就返回了,不往下计算
if(spaceSize==0){
return;
}
int newlistSize=listSize+spaceSize*2;
char[] tempArray = new char[newlistSize];
System.arraycopy(str.toCharArray(), 0, tempArray, 0, str
.toCharArray().length);
listSize--;
newlistSize--;
while(listSize>=0&& newlistSize>listSize){
if(tempArray[listSize]==' '){
tempArray[newlistSize--]= '0';
tempArray[newlistSize--]= '2';
tempArray[newlistSize--]='%';
}else{
tempArray[newlistSize--]= tempArray[listSize];
}
--listSize;
}
//
for(int i=0;i<tempArray.length;i++){
System.out.print(tempArray[i]);
}
}
”