這道題我用了三種解法,都可以在牛客網上通過。
第一種方法比較直觀,但是比較麻煩;第二種方法是在第一種方法的基礎上改的,也比較直觀;第三種方法是我參考網上寫的,跟前面兩種比較不同
public class Solution {
public String replaceSpace(StringBuffer str) {
//第一種,這種解法比較直觀但也比較麻煩,思路是從前往後看,遇到空格就保存空格後面的字符,然後替換掉空格,最後將連接空格後面的字符
/*String st = str.toString();//將StringBuffer轉爲String
char[] tct = st.toCharArray();//將String轉爲char數組,並存在char數組中
char[] ct = new char[100];
System.arraycopy(tct,0,ct,0,tct.length);//將tct數組的值賦給ct數組
int n = tct.length;//獲取tct數組的長度,也就是輸入的字符串中有幾個字符
char[] tst = new char[100];//新建一箇中間數組,存放空格後面的字符
for(int i = 0;i < n;){
int nn = 0;//nn記錄空格後有幾個字符
if(ct[i] == ' '){//當檢測到空格時
for(int j = i + 1,ii = 0;j < n;j++,ii++){
//將空格後面的字符存在tst字符數組中
tst[ii] = ct[j];
nn++;
}
//賦值
ct[i] = '%';
ct[i + 1] = '2';
ct[i + 2] = '0';
//將tst字符數組中的字符賦給ct字符數組
for(int j = i + 3,ii = 0;ii <= nn;j++,ii++){
ct[j] = tst[ii];
}
n += 2;//ct字符數組長度加2
i += 2;//由於賦值後的20明顯不是空格,所以就跳過他們
continue;
}
i++;//繼續下一個字符
}
StringBuffer stringBuffer = new StringBuffer(String.valueOf(ct));//將String類型轉爲StringBuffer類型
stringBuffer.setLength(n);//設置StringBuffer類型的stringBuffer長度爲加入新字符後的長度n
return stringBuffer.toString();//將stringBuffer轉爲String類型後返回*/
//第二種,跟第一種方法相似,新建一個字符數組,邊判斷邊賦值,最後返回這個新建的數組
/*String st = str.toString();//將StringBuffer轉爲String
char[] ct = st.toCharArray();//將String轉爲char數組,並存在char數組中
char[] tct = new char[100];//新數組
int n = ct.length;//原字符串的長度
int index = 0;
for(int i = 0;i < n;){
if(ct[i] == ' '){
//賦值
tct[index] = '%';
tct[index + 1] = '2';
tct[index + 2] = '0';
index += 3;//新數組往後三個
i++;
}
else{
//不是空格就把原來的值賦給新數組
tct[index] = ct[i];
i++;
index++;
}
}
StringBuffer stringBuffer = new StringBuffer(String.valueOf(tct));//將String類型轉爲StringBuffer類型
stringBuffer.setLength(index);//設置StringBuffer類型的stringBuffer長度爲加入新字符後的長度n
return stringBuffer.toString();//將stringBuffer轉爲String類型後返回*/
/*第三種,跟前兩種不同,這種解法是將字符串從後向前找的,這種解法是我參考網上其他人寫的,
而且這種解法的好處是它先計算了新建數組的長度,然後再進行賦值。而前面兩種解法把字符的個數寫死了,
只能是轉換後有100個字符,如果超過100個,則報錯*/
int n = str.length();//字符串的長度
int ii = 0;//空格的個數ii
for(int i = 0;i < n;i++){
//檢測空格
if(str.charAt(i)==' '){
ii++;
}
}
int nn = 2 * ii + n;//根據空格的個數,得到新數組的長度
int index = nn -1;
char[] ct = new char[nn];//新建數組
while(n > 0){
if(str.charAt(n - 1) != ' '){
//如果不是空格
ct[index--] = str.charAt(n-1);
}
else{
//如果是空格
ct[index--] = '0';
ct[index--] = '2';
ct[index--] = '%';
}
//取下一個字符
n--;
}
return String.valueOf(ct);//將字符數組轉爲String類型後返回
}
}