题目
请实现一个函数,把字符串中的每个空格替换成"%20"。例例如输入"We are
happy",则输出"We%20are%20happy"
解题
先遍历一遍计算空格数量,然后扩展字符串长度,因为每个空格要替换三个字符,所以扩展的长度是空格数*2加上原来的字符串长度,准备两个指针,front和rear一前一后,前面的指向原始字符串的末尾,后面那个指向替换后的字符串的末尾。从前往后替换,前面的字符串碰到第一个空格时,前面的指针向前一个,后面的指针开始从后往前替换,替换完成后把后面的指针往前移动3个,如此往复。
复杂度分析
因为所有字符都只复制了一次,所以时间复杂度是O(n)。
解题代码
package Offer;
public class T05 {
public static void main(String[] args) {
String str = "We are happy";
char[] charArray = str.toCharArray();
System.out.println(replace(charArray));
}
public static String replace(char[] charArray) {
if(charArray == null || charArray.length<=0) {
return null;
}
int length = charArray.length;
int count = 0;//累计空格数量
for(int i = 0;i < charArray.length;i++) {
if(charArray[i] == ' ') {
count++;
}
}
if(count == 0) {
return null;
}
char[] temp = new char[length+count*2];
int front = length - 1;//前指针
int rear = temp.length-1;
while(front>=0) {
if(charArray[front] == ' ') {
temp[rear] = '0';
temp[rear-1] = '2';
temp[rear-2] = '%';
rear = rear-3;
}else {
temp[rear] = charArray[front];
rear--;
}
front--;
}
return new String(temp);
}
}
输出结果
tips:
注意String和Char的区别:
char属于原始数据类型即字符,java中用单引号‘ ’来包含;String属于对象即字符串,java中用双引号" "来包含,String内部用来存储的结果是一个char字符数组。