要求:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:
1、先遍历一次字符串统计出字符串中空格的总数,并由此计算出替换之后的字符串的总长度。
2、之后从字符串的后面开始复制和替换,准备两个指针,分别指向原始字符串的末尾p1和替换之后字符串的末尾p2,向前移动p1,同时逐个把它指向的字符复制到p2位置,直到碰到空格位置,此时p1向前移动一格,在p2位置插入字符串‘%20’,之后p1继续移动,过程相似。
3、最终p1和p2指向同一位置。
public String ReplaceBlank(StringBuffer string){
// 遍历一次字符串获取字符串的长度和空格数量
int originalLength = string.length(); // 字符串长度
int numberOfBlank = 0; // 空格数量
for(int i=0;i< string.length();i++){
if(string.charAt(i) ==' '){
numberOfBlank++;
}
}
// 替换空格
int newLength = originalLength+2*numberOfBlank; // 空格替换后的长度
string.setLength(newLength); // 注意重新设置string的空间大
int indexOfOriginal = originalLength-1;
int indexOfNew = newLength-1;
while(indexOfOriginal>=0 && indexOfNew>indexOfOriginal){ // 两个指针到达同一位置的时候跳出循环
if(string.charAt(indexOfOriginal) == ' '){ // 指到空格的时候进行替换空格
string.setCharAt(indexOfNew--,'0'); // 注意i--,是先赋值,再减一
string.setCharAt(indexOfNew--,'2');
string.setCharAt(indexOfNew--,'%');
}else{
System.out.println(string.charAt(indexOfOriginal));
string.setCharAt(indexOfNew--,string.charAt(indexOfOriginal));
}
indexOfOriginal--;
}
return string.toString();
}
时间复杂度:O(n)
网友评论