擴展:合併兩個有序數組數組
package cglib;函數
/**
* 寫一個函數,把字符串中全部的空格替換爲%20 。
* 分析:
* 先遍歷一次字符串,獲得空格個數,進而獲得將空格轉換成%20後的串長度 (每一個空格替換爲%20須要增長2個字符,x個空格增長2x個字符)。
* 而後從後向前依次對空格進行替換,非空格原樣拷貝。
* 若是原串有足夠大的空間, 則替換過程直接在原串上進行, 由於從後向前替換的過程當中,新串用到的空間必定是舊串不須要的空間;
* 若是原串的空間不夠大,或是就直接是字符串長度,那麼就新開一個串來保存替換後的結果.
*
*
*/索引
public class StringNumber {
public static String replace(String s) {字符串
if (s == null || s.length() == 0) return s;class
final char[] c = s.toCharArray();
int len = c.length;
int count = 0;
for (int i=0;i<len;i++) {
if (c[i]==' ') {
++count;
}
}擴展
//新開一個數組來保存替換後的結果
//每一個空格替換爲%20後須要增長2個字符,count個空格增長2*count個字符
final char[] d = new char[len+2*count];
int idx=0;
for (int i=0;i<len;i++) {
if (c[i]==' ') {
d[idx]='%';
d[idx+1]='2';
d[idx+2]='0';
idx += 3;
} else {
d[idx]=c[i];
idx++;
}
}coding
return String.valueOf(d);
}循環
public static String replace2(String s) {遍歷
if (s == null || s.length() == 0) return s;統計
int len=s.length();
int count = 0;
//統計空格個數
for (int i=0;i<len;i++) {
if (s.charAt(i)==' ') {
++count;
}
}
//將原字符串擴容
for(int i=0;i<2*count;i++){
s=s.concat("\0");
}
//擴容後,原串就會有足夠大的空間;替換可直接在原串上進行;
//從後向前依次對空格進行替換,非空格原樣拷貝;
//由於從後向前替換的過程當中,新串用到的空間必定是舊串不須要的空間
final char[] c = s.toCharArray();
int idx=len-1+2*count;
for (int i=len-1; i>=0; i--) {
if (c[i] == ' ') {
c[idx] = '0';
c[idx-1] = '2';
c[idx-2] = '%';
idx -= 3;
} else {
c[idx] = c[i];
idx--;
}
}
return String.valueOf(c);
}
public static void merge2SortedArray(int[] a , int[] b , int[] c){
//a數組的當前索引
int i = 0;
//b數組的當前索引
int j = 0;
//c數組的當前索引
int k = 0;
//循環,只要a和b都沒有遍歷完就一直循環
while(i < a.length && j < b.length){
//若是當前a[i]比b[j]小,就把c[k]元素置爲a[i],同時k++,i++
if(a[i] < b[j]){
c[k++] = a[i++];
//不然,若是當前a[i]比b[j]大,就把c[k]元素置爲b[j],同時k++,j++
}else{
c[k++] = b[j++];
}
}
//上個循環可以結束,說明a已經循環完或b已經循環完
//下述兩個循環只能有一個知足循環條件
//只要a沒有循環完,就把a中剩下的元素依次放入c中
while(i < a.length){
c[k++] = a[i++];
}
//只要b沒有循環完,就把b中剩下的元素依次放入c中
while(j < b.length){
c[k++] = b[j++];
}
}
public static void main(String[] args) {
String s = " i am danielcheng . i am coding ... ";
System.out.println(replace(s));
System.out.println(replace2(s));
System.out.println("合併兩數組");
//待合併數組a
int[] a = new int[]{1,3,5,7,9};
//待合併數組b
int[] b = new int[]{2,4,6,8};
//c用來存放合併以後的數組
int[] c = new int[a.length+b.length];
merge2SortedArray(a, b, c);
for(int i = 0;i < c.length;i++){
System.out.print(c[i]+"\t");
}
}
}
輸出:%20i%20am%20danielcheng%20.%20%20i%20am%20coding%20...%20 %20i%20am%20danielcheng%20.%20%20i%20am%20coding%20...%20 合併兩數組 1 2 3 4 5 6 7 8 9