1. 程式人生 > >演算法--字串

演算法--字串

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--];
		}
	}