劍指offer學習(Java)——面試題5:替換字符串中的空格

    題目:請實現一個函數,把字符串中的每個空格替換成“%20”。例如,輸入“We are happy.”,則輸出“We%20are%20happy.”。

這題思路也很清晰,字符串,字符數組,或者其他的數組,涉及到大量移動的時候就從屁股開始

牛客練習連接:替換空格

代碼如下:

public class Solution {
public String replaceSpace(StringBuffer str) {
if(str == null || str.length()==0){
return str.toString();
}
int originalLength = str.length();
int numberOfBank = 0;
for(int i =0;i<originalLength;i++){
if(str.charAt(i)==' '){
numberOfBank++;
}
}

int newLength = originalLength+numberOfBank*2;
str.setLength(newLength);//這裏需要重新設置StringBuffer的長度,不然會報越界異常
int p1 = originalLength-1;
int p2 = newLength-1;
while(p1>=0 && p2>p1){
if(str.charAt(p1)!=' '){
str.setCharAt(p2--, str.charAt(p1));
}else{
str.setCharAt(p2--, '0');
str.setCharAt(p2--, '2');
str.setCharAt(p2--, '%');
}
p1--;
}
return str.toString();
}
}


    此題拓展:有兩個排序的數組A1和A2,內存在A1的末尾有足夠多的空餘空間容納A2。請實現一個函數,把A2中所有數字插入A1中,並且所有的數字是排序的。

    就是一次歸併排序,思路一樣的,從屁股開始,從A1和A2的屁股取出兩個數比較,大的放到A1的後面,然後重複這個動作,如果A2先放完,結束;如果A1先放完,則把A2剩下的逐個放到A1中。

leetcode練習地址:88. Merge Sorted Array

代碼如下:

public class Solution{
public void merge(int[] A1,int[] A2){
int i = A1.length - 1;
int j = A2.length - 1;
int length = i+j+1;
while(i>=0 && j>=0){
if(A1[i]<A2[j]){
A1[length--]=A2[j];
j--;
}else{
A1[length--]=A1[i];
i--;
}
}
while(j>=0){
A1[length--]=A2[j];
j--;
}
}
}


兩個while也可以簡寫爲:

while(i>=0 && j>=0) A1[length--]=(A1[i]>A2[j])?A1[i--]:A2[j--];
while(j>=0) A1[length--]=A2[j--];

直接貼的VSCode裏面自己寫的代碼,彩色比較炫奮鬥


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章