扩展:合并两个有序数组数组
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