今日头条面试题

看到两道今日头条的面试题[1],尝试做了下,在这里整理下思路。

String Shifting

naive 的方法不用说了,时间复杂度 O(n^2),肯定不是面试官想要的答案了。

假设 shift k 次的时候发生了第一次 match,那么再 shift k 次必然再次 match,并且小于 k 时不可能 match。所以可知该字符串 S 是以 S[0:k] 为周期重复的。所以问题转变成求字符串的最小周期。用 KMP 的 partial match table 可求[2],时间复杂度 O(n)。

字典序

这是个排序问题。首先要明白什么是字典序,字典序和自然数序列不同,不是可以直接生成的,而是通过比较两个字符串的大小排序生成的。对于 Java 而言,就是实现一个 comparator 然后 sort 就可以了,时间复杂度 O(nlgn),数据量太大的话可以 divide,然后 merge sort。

再进一步想其实这个问题很像 Kth Largest Element in an Array 问题[3],用 heap,时间复杂度 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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,351评论 0 33
  • 二维数组螺旋打印 def rotate(matrix): m,k,count=len(maxtrix),0,1...
    把自己先搞丢阅读 2,999评论 0 0
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 18,128评论 2 36
  • 查询web界面如下: 基本查询配置 q 查询的关键字,此参数最为重要,例如,q=id:1,默认为q=*:* ,相...
    小乖心塞阅读 9,910评论 2 0
  • 幸福是一种感受,一种无可名状,自我体会的感受。幸福是一种心境,一种宁静致远,淡泊明志的心境。幸福是一种心态...
    一剪红梅阅读 2,713评论 2 1