当前位置: 代码迷 >> Web前端 >> 回答: web前端笔试一道面试题目新解
  详细解决方案

回答: web前端笔试一道面试题目新解

热度:359   发布时间:2012-10-29 10:03:53.0
答复: web前端笔试一道面试题目新解
针对该问题,有两种解法,无非就是时间和空间的权衡,在实际应用中根据具体情况而定,具体代码就不写了,分析如下,感兴趣的欢迎PK。

第一种解法,牺牲时间换取空间,具体做法是:
1,首先对字符串进行排序,这一步的时间复杂度是固定的。可以有多种排序算法选择。
2,扫描排序后字符串,并且统计遇到的每个字符的数量。方法为:如果下一个字符和当前字符不一致,则当前统计到的数据就是该字符在字符串中出现的次数,此时拿该数据与之前出现过的最大的数据进行比较。
3,扫面结束之后即可以得到出现次数最多的字符,以及出现的次数。
在此过程中空间复杂度为:3,排序时候的空间复杂度为1,扫描阶段需要记录当前字符,当前字符出现的次数,以及曾经出现的最多字符的出现次数。


第二种解法,牺牲空间换取时间,具体做法是:
1,不排序,直接扫描字符串,每遇到一个之前没遇到的字符就把它记下来,并设置其出现的次数为1,如果之前出现,则将该字符的出现次数加1.
2,在每扫描一个字符,并且得到该字符出现的次数时,就与最大的一个次数比较,得到新的最大的次数和字符。
3,扫描结束之后也就得到了结果

这个过程中只需要遍历字符串一次,时间复杂度是线性的,空间复杂度为(字符串中出现的不同的字符串的次数+1)*2.

--有疑问请继续跟帖。

1 楼 liuzhiqiangruc 2010-12-11  
该问题为:

寻找一个字符串中出现最多的字符,以及出现了多少次
  相关解决方案