一、字串翻轉
三步反轉法,先將兩部分分別反轉,然後再整體反轉。
abcdef -> defabc
(1)cbadef // 旋轉前一部分;
(2)cbafed // 旋轉後一部分;
(3)defabc // 整個旋轉
那麼將「i am a student.」 -> "studnet. a am i",也類似。
二、字串的包含
a = "abcxyzlmnopreset"
b = "abxy"
a,b中只包含小寫字母。
如何判斷b中的字元都包含在字串a中 ?
hash,由於只有26個小寫字母,可以使用整數代替雜湊表。
先將a中字母放入雜湊表,再根據b中的字母進行判斷。
作者認為還不完美 ?是否要將b放入雜湊表,而使用a進行對比 ?
因為b的每個字母都必須被檢查到,最好的情況,可能比較少了a中字母就可以得出結果了,最壞的情況,a中字母都需要比較。
若包含任意字母的字串,如何處理?
三、字串的全排列
p = permutation, c = combination
排列有順序,組合無順序
p(n,m) = n! / (n-m)!
c(n,m) = n! / ( (n-m)! * m! )
c(n,m) = c(n, n-m)
迴圈排列數p(n,r) = n! / ( (n-r)! * r! ) 即,r個頭不涉及排序
程式設計之法 面試和演算法心得(奇偶調序)
輸入乙個整數陣列,調整陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。要求時間複雜度為o n 最容易想到的辦法是從頭掃瞄這個陣列,每碰到乙個偶數,拿出這個數字,並把位於這個數字後面的所有數字往前挪動一位。挪完之後在陣列的末尾有乙個空位,然後把該偶數放入這個空位。由於每碰...
程式設計之法 面試和演算法心得 最近公共祖先LCA問題
小結 暴力 tarjan演算法 是乙個找強連通分量的演算法。dfs 並查集,每次將兩個節點對的最近公共祖先的查詢儲存起來,然後dfs更新一次。複雜度 o n q q為查詢個數 rmq 沒看 但前面暴力求a i,j 最小值的位子可以考慮一下 1.普通的o n 3 2.動態規劃將為o n 2 線段樹 用...
程式設計之法 面試和演算法心得(最大連續子陣列和)
輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值,要求時間複雜度為o n 例如輸入的陣列為1,2,3,10,4,7,2,5,和最大的子陣列為3,10,4,7,2,因此輸出為該子陣列的和18。求乙個陣列的最大子陣列和,我想...