牛客網線上程式設計(劍指offer)---字串替換
阿新 • • 發佈:2019-01-26
題目描述
請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。
思路分析:
之前在書上看到這個題,本來這個題的思想時,為了降低替換的複雜度,應該首先遍歷得到替換後字串的長度,然後從後往前替換,這樣能避免有些情況時多次移動字串。但是Java中有了StringBuffer,可以改變字串的長度,所以更加方便。
但是一開始的時候,這麼寫的時候,發現當連續多個空格時,只能替換成一個“%20”,這與實際情況不符,程式碼如下:
public class Solution {
public String replaceSpace(StringBuffer str ) {
int len = str.length();
char[] res = {'%','2','0'};
for (int i = 0; i < len; i++)
{
if (str.charAt(i)==' ')
{
str.deleteCharAt(i);
str.insert(i,res);//第一個位置是offset,也不知道是不是這個不對?
}
}
return str.toString();
}
}
但是事實證明,最好不要輕易改變原變數。這個能通過87%的用例,估計連續多個的空格都不行。
然後參考了下別人寫的,改成下面這個,雖然新建了個物件,但是這麼做穩妥一點。
public class Solution {
public String replaceSpace(StringBuffer str) {
int len = str.length();
String res = "%20";
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < len; i++)
{
if (str.charAt(i)==' ')
{
stringBuffer.append(res);
}else{
stringBuffer.append(str.charAt(i));
}
}
return stringBuffer.toString();
}
}
最後得到的執行結果是:
//執行時間:37ms
//佔用記憶體:654k
還有看到更加簡潔明瞭,特別厲害的方法,就是用了String類的replaceAll方法,如下:
`public class Solution {
public String replaceSpace(StringBuffer str) {
return str.toString().replaceAll(“\s”,”%20”);
}
}
`
執行結果:
執行時間:30ms
佔用記憶體:629k