请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
简易版:
public class Solution {
public String replaceSpace(StringBuffer str) {
for(int k=0; k<str.length(); k++)
{
char index = str.charAt(k);
if(index == ' ')
{
str.replace(k, k+1, "%20");
}
}
return str.toString();
}
时间复杂度为O(n)版:
思路:(1)先统计空格数n,计算出新的数组的长度original + 2n;
(2)指针P1指向original,指针P2指向original + 2n;
(3)P1逆向查找空格,没有空格就将P1所指元素复制到P2,P1找到空格就将%20三个字符填充到P2位置,每次复制或者填充一次,指针都要减一;
(4)如果P1==P2,循环结束
// 计算字符串中包含的空格个数
public int getBlankNum(String str){
int count = 0;
for(int i = 0; i<str.length(); i++){
String tempStr = String.valueOf(str.charAt(i));
if(tempStr.equals(" "))
count ++;
}
return count;
}
public String replaceSpace(String str){
if(str == null || str.length() <=0){
return null;
}
int length = str.length();
int newLength = length + getBlankNum(str)*2;
char[] tempArray = new char[newLength];
System.arraycopy(str.toCharArray(),0,tempArray, 0,str.toCharArray().length);
int indexOfOriginal = length -1;
int indexOfNew = newLength -1;
while(indexOfOriginal >=0 && indexOfOriginal != indexOfNew){
if(tempArray[indexOfOriginal]==' '){
tempArray[indexOfNew--] = '0';
tempArray[indexOfNew--] = '2';
tempArray[indexOfNew--] = '%';
}else{
tempArray[indexOfNew--] = tempArray[indexOfOriginal];
}
indexOfOriginal--;
}
return Arrays.toString(tempArray);
}