今日頭條面試題

看到兩道今日頭條的面試題[1],嘗試做了下,在這里整理下思路。

String Shifting

naive 的方法不用說了,時間復(fù)雜度 O(n^2),肯定不是面試官想要的答案了。

假設(shè) shift k 次的時候發(fā)生了第一次 match,那么再 shift k 次必然再次 match,并且小于 k 時不可能 match。所以可知該字符串 S 是以 S[0:k] 為周期重復(fù)的。所以問題轉(zhuǎn)變成求字符串的最小周期。用 KMP 的 partial match table 可求[2],時間復(fù)雜度 O(n)。

字典序

這是個排序問題。首先要明白什么是字典序,字典序和自然數(shù)序列不同,不是可以直接生成的,而是通過比較兩個字符串的大小排序生成的。對于 Java 而言,就是實現(xiàn)一個 comparator 然后 sort 就可以了,時間復(fù)雜度 O(nlgn),數(shù)據(jù)量太大的話可以 divide,然后 merge sort。

再進(jìn)一步想其實這個問題很像 Kth Largest Element in an Array 問題[3],用 heap,時間復(fù)雜度 O(klgn)[4]。


  1. http://li5jun.com/article/89.html ?

  2. http://stackoverflow.com/a/33864413/1872897 ?

  3. https://leetcode.com/problems/kth-largest-element-in-an-array/ ?

  4. http://www.programcreek.com/2014/05/leetcode-kth-largest-element-in-an-array-java/ ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,891評論 0 33
  • 二維數(shù)組螺旋打印 def rotate(matrix): m,k,count=len(maxtrix),0,1...
    把自己先搞丟閱讀 435評論 0 0
  • LeetCode 刷題隨手記 - 第一部分 前 256 題(非會員),僅算法題,的吐槽 https://leetc...
    蕾娜漢默閱讀 18,367評論 2 36
  • 幸福是一種感受,一種無可名狀,自我體會的感受。幸福是一種心境,一種寧靜致遠(yuǎn),淡泊明志的心境。幸福是一種心態(tài)...
    一剪紅梅閱讀 400評論 2 1

友情鏈接更多精彩內(nèi)容