算法--字符串

1.实现一个函数,将字符串的每个空格替换为“%20”  在原来字符串上替换  空间足够

如果从前往后,当遇见空格时,要替换成%20时,势必要移动后面所有字符。可以考虑从后往前来处理替换之后字符与原字符的关系,首先计算原来字符串中空格数量,由于一个空格替换成3个字符,因此字符串长度要变为length + 2 * numSpace

从后往前,当遇见非空格时,直接对应放入,当遇空格时,j指针要移动三次一次放入02%。

public static char[] replaceSpace(char[] arr, int length){
		int numSpace = 0;
		for(int i=0; i<length; i++){
			if(arr[i] == ' ') numSpace++;
		}
		int j = length + 2 * numSpace - 1;
		for(int i=length-1; i>=0; i--){
			if(arr[i] != ' '){
				arr[j] = arr[i];
				j--;
			}else{
				arr[j] = '0';
				j--;
				arr[j] = '2';
				j--;
				arr[j] = '%';
				j--;
			}
		}
		return arr;
	}

2.A1,A2两个数组,A1容量足够,将A2放入A1中,让整体有序

从后到前比较A1与A2的大小关系,放入到对应位置

public static void putArr(int[] A1, int l1, int [] A2, int l2){
		int k = l1 + l2 - 1;
		for(int i=l1-1, j=l2-1; i>=0 || j>=0; ){
			if(i<0) A1[k--] = A2[j--];
			else if(j<0) A1[k--] = A1[i--];
			else if(A1[i]>A2[j]) A1[k--] = A1[i--];
			else A1[k--] = A2[j--];
		}
	}

猜你喜欢

转载自blog.csdn.net/u014106644/article/details/83590235