5、空格替换

泄露秘密 提交于 2020-01-06 20:52:29

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

 题目:将一个字符串中的空格替换成“%20”。  例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

 

两种思路:不同解题思路导致时间复杂度不同。

思路一:从前往后,遇到两次空格都增加字符串长度且每次的时间复杂度都是O(n),整体时间复杂度为:T(n) = O(n的平法),效率低。

思路二:从后往前。

测试实例:

class Method{
	public String replaceblank (String input) {
		if(input == null) {					//判断是否为空,为空则直接返回null
			return null;
		}
		
		int num = 0;						//定义计数器来计算空格的个数
		int length = input.length();		//将字符串的长度赋给length
		int newlength  = 0;					//定义变量接受改进后的字符串长度
		/*遍历循环,调用索引来判断*/
		for(int i = 0; i < input.length();i++) {
			if(' ' == input.charAt(i)) {	//调用字符串的索引和空格进行对比
				num++;
			}
		}
		/* 增加和转换后的字符串*/
		newlength = length + (num*2);			//增加后的字符串长度
		//为什么要转换成数组形式的字符串呢?为了获取 索引 进行判断
		char [] newchar = new char[newlength];
		int index = newlength-1;
		for(int i = length - 1; i >= 0;i--) {	//倒着循环判断
			//注意:第一个指针一个是在原数组的最后,第二个指针是在增加长度的数组的最后
			if(input.charAt(i) == ' ') {		//判断是否循环遇到空格,进行替换
				newchar[index--] = '0';			//实现替换功能
				newchar[index--] = '2';
				newchar[index--] = '%';
			}else {								//如果没有遇到空格,则copy过去
				newchar[index--] = input.charAt(i);
			}	
		}
			
		return new String(newchar);				//返回转换后的结果
	}
		
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!