剑指offer——5.替换空格

题目:

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

知识点:

  1. 字符串是不可迭代的,若想迭代字符串,可以转成字节;判断字符串中有几个' ':str.charAt(i)==‘ ’
  2. 设置stringBuffer中某位的值,str.setCharAt(index, '0')

注意:

  1. 写代码之前,先将输入的范围固定
  2. java中字符串用‘ ’

代码实现(java):

题1:

  • 从左往右替换时间复杂度O(n²)
  • 从右往左替换时间复杂度O(n):先计算字符串中有多少空格,确定替换后字符串的长度(原p1,现p2);接下来将原位置的字符串依次替换至新位置。
private static String change(StringBuffer str) {
                if(str==null){
                return null;
                }
		//定位p1、p2的位置,依次左移赋值
		int count = 0;
		for(int i=0; i<str.length(); i++) {
			if(str.charAt(i)==' ') {
				count++;
			}
		}
		int p1 = str.length()-1;
		str.setLength(str.length() + 2*count);
		int p2 = str.length()-1;
		while(p2>=p1&&p1>=0) {
			if(str.charAt(p1)==' ') {
				str.setCharAt(p2, '0');
				str.setCharAt(p2-1, '2');
				str.setCharAt(p2-2, '%');
				p2-=3;
				p1--;
			}else {
				str.setCharAt(p2, str.charAt(p1));
				p2--;
				p1--;
			}
		}
		return str.toString();
	}

 题2:有两个有序的数组A1和A2,A1末尾有足够空间容纳A2。实现一个函数将A2的所有数字插入到A1中,并且所有数字是有序的。

private static int[] merge(int[] A1, int[] A2) {
		if(A1==null) {
			return null;
		}
		
		int count = 0;
		for(int i:A1) {
			if(i!= 0) {
				count++;
			}
		}
		
		int A1Index = count-1;
		int A2Index = A2.length-1;
		int allIndex = count + A2.length -1;
                while(allIndex>=0) {
			if(A1Index <0) {
				A1[allIndex--] = A2[A2Index--];
			}else if(A2Index <0) {
				A1[allIndex--] = A1[A1Index--];
			}else if(A1[A1Index]>=A2[A2Index]){
				A1[allIndex--] = A1[A1Index--];
			}else {
				A1[allIndex--] = A2[A2Index--];
			}
		}
		return A1;
}

思考:是不是所有的替换和插入,从时间空间复杂度来说,都最好从后往前插更好呢

 代码实现(C++):

void replaceSpace(char *str, int length) {
	if (str == NULL && length <= 0)
		return;
	/*strLength表示str的实际长度、numberOfBlank*/
	int strLength = 0;
	int numberOfBlank = 0;
	for (int i = 0; str[i] != '\0'; i++) // '\0'代表空字符
	{	
		++strLength;
		if(str[i]==' ')
			++numberOfBlank;
	}
	/*str的新长度*/
	int newStrLength = strLength + numberOfBlank*2;
	/*定义两个指针*/
	int indexOfOld = strLength;
	int indexOfNew = newStrLength;
	/*依次从右往左遍历*/
	
	/*当indexOfOld至0或者indexOfOld=indexOfNew,退出*/
	while (indexOfOld >= 0 && indexOfNew > indexOfOld)
	{	
		/*indexOfOld找到' ',对应indexOfNew替换*/
		if (str[indexOfOld] == ' ')
		{
			str[indexOfNew--] = '0';
			str[indexOfNew--] = '2';
			str[indexOfNew--] = '%';
		}
		else {
			str[indexOfNew--] = str[indexOfOld];
		}
		--indexOfOld;
	}
}


int main()
{
	const int length = 100;
	char str[length] = " helloworld";
	cout << str << endl;
	replaceSpace(str, length);
	cout << str << endl;
	getchar();

	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值