剑指Offer(Java实现):替换空格

题目
请实现一个函数,把字符串中的每个空格替换成"%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字符数组。

发布了49 篇原创文章 · 获赞 4 · 访问量 2529

猜你喜欢

转载自blog.csdn.net/weixin_42040292/article/details/103605379