锁定老帖子 主题:web前端笔试一道面试题目新解
精华帖 (0) :: 良好帖 (0) :: 新手帖 (12) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-10
用正则表达式的那个算法效率太低了吧
|
|
返回顶楼 | |
发表时间:2010-12-10
针对该问题,有两种解法,无非就是时间和空间的权衡,在实际应用中根据具体情况而定,具体代码就不写了,分析如下,感兴趣的欢迎PK。
第一种解法,牺牲时间换取空间,具体做法是: 1,首先对字符串进行排序,这一步的时间复杂度是固定的。可以有多种排序算法选择。 2,扫描排序后字符串,并且统计遇到的每个字符的数量。方法为:如果下一个字符和当前字符不一致,则当前统计到的数据就是该字符在字符串中出现的次数,此时拿该数据与之前出现过的最大的数据进行比较。 3,扫面结束之后即可以得到出现次数最多的字符,以及出现的次数。 在此过程中空间复杂度为:3,排序时候的空间复杂度为1,扫描阶段需要记录当前字符,当前字符出现的次数,以及曾经出现的最多字符的出现次数。 第二种解法,牺牲空间换取时间,具体做法是: 1,不排序,直接扫描字符串,每遇到一个之前没遇到的字符就把它记下来,并设置其出现的次数为1,如果之前出现,则将该字符的出现次数加1. 2,在每扫描一个字符,并且得到该字符出现的次数时,就与最大的一个次数比较,得到新的最大的次数和字符。 3,扫描结束之后也就得到了结果 这个过程中只需要遍历字符串一次,时间复杂度是线性的,空间复杂度为(字符串中出现的不同的字符串的次数+1)*2. --有疑问请继续跟帖。 |
|
返回顶楼 | |
发表时间:2010-12-10
z_joey 写道 用正则表达式的那个算法效率太低了吧
哪种用正则的方式也不失为一种好方法,是一种不错的思路。 |
|
返回顶楼 | |
发表时间:2010-12-13
楼主 的效率低 (网友给的效率高一些,每个字符只做一次) 假如这个字符串很长的话 你循环就很多次 ,
|
|
返回顶楼 | |