看到這題,我的第一思路是這樣的:一組單詞不是有空格嘛,所以直接使用string類的split函式直接分割為char陣列不就好了,不過在這之前需要判斷一下第乙個位置和最後乙個位置是否有空格,然後針對空格的出現情況再進行替換。發現oj的時候,如你所猜,自然是失敗的。因為我忽略乙個問題,就是如果乙個句子中都是空格,呼叫split函式之後會發生什麼,會是一組空串。那麼根據題目要求,應該全部替換成%20才對。所以這種思路被斃掉了。
於是,我尋找下一種思路,聯想到從尾部迴圈替換的思想(在氣泡排序演算法之中也是從尾部往前進行比較然後交換的),於是形成如下的思路:首先統計出該字串中所有的空格數量,並重新計算新串所需的char陣列的長度,把舊串轉化成的char陣列拷貝到乙個臨時陣列中,並同時建立乙個新的char陣列,該新陣列的長度是計算之後的長度。從該新陣列的尾部開始迴圈,依次往前比較,只要遇到了空格就替換為%20。如果沒有遇到空格就直接複製過來就行。
ok,基於以上思路,我寫出了如下的**(已被牛客oj平台ac了):
package com.rhwayfun.offer;
/** * 題目描述
* *
*@author administrator
* */
public
class
replacespace else
originalstrindex--;
}return
new string(temparray);
}/**
* 計算空格數
*@param string
*@return
*/private
intgetblanknum(string string)
}return count;
}public
static
void
main(string args)
}
由於只有一層迴圈,加上統計空格的時間開銷,就是兩個迴圈的時間開銷,其他的操作都是o(
1)的時間複雜度。所以該演算法綜合起來的時間複雜度是o(
n)。
劍指offer 二 字串 cpp
1.替換空格void replacespace char str,int length originallen int newlen originallen numofblank 2 if newlen length return while originallen 0 originallen ne...
劍指offer系列20 字串的排列
求乙個字串中所有出現的字元的排列組合。首先把這個問題分解成若干個小問題 分治法。將所有的字元的排列可以拆分為第乙個字元的選取和其餘所有字元。然後其餘的字元又可以拆分為第乙個字元的變化選取和其餘的字串。以此類推即可得到解答。這就是很明顯的遞迴了。注意遞迴的結束條件以及什麼時候把這個字串壓入vector...
劍指offer系列 38 字串的排列
nowcoder 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串 abc,則列印出由字元 a,b,c 所能排列出來的所有字串 abc,acb,bac,bca,cab 和 cba。我們求整個字串的排列,可以看成兩步 首先求所有可能出現在第乙個位置的字元,即把第乙個字元和後面所有的字元...