锁定老帖子 主题:面试题目字符统计
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-01
看基础去了
|
|
返回顶楼 | |
发表时间:2009-06-02
突然觉得自己什么都不会....
受教了~ |
|
返回顶楼 | |
发表时间:2009-06-02
最后修改:2009-06-02
cy729215495 写道 linkedmap,学习了!
高手果然就是高手! 如果我要对字符出现的次数按照从大到小的次序排序各位的方法就很不好扩展了! 如果只是要找出最大的.... 我知道的有一种是正则但非常的难以理解.....朋友写出后看了一天都没想明白 |
|
返回顶楼 | |
发表时间:2009-06-02
姜太公 写道 一次遍历,统计每个字符出现次数,保持有序。第一个出现次数为1的就是。效率O(n)
想问下o(n)是怎么做到的? |
|
返回顶楼 | |
发表时间:2009-06-02
抛出异常的爱 写道 cy729215495 写道 linkedmap,学习了!
高手果然就是高手! 如果我要对字符出现的次数按照从大到小的次序排序各位的方法就很不好扩展了! 如果只是要找出最大的.... 我知道的有一种是正则但非常的难以理解.....朋友写出后看了一天都没想明白 把正则贴出来,让大家学习学习。 |
|
返回顶楼 | |
发表时间:2009-06-02
最后修改:2009-06-02
#include <stdio.h> #include <stdlib.h> #define MAX_CHAR 256 int firstNonRepeatedChar(char str[], char *c) { int i = 0; int j = 0; int p[MAX_CHAR]; for (j = 0; j < MAX_CHAR; j++) { p[j] = 0; } while (str[i] != '\0') { p[str[i]]++; i++; } for (i = 0; str[i] != '\0'; i++) { if (p[str[i]] == 1) { *c = str[i]; return 1; } } return 0; } int main() { char str[] = "total"; char a; if (firstNonRepeatedChar(str, &a) == 1) { printf("%c", a); } return 0; } |
|
返回顶楼 | |
发表时间:2009-06-02
楼上这个算法是最优的,我个人比较喜欢这个算法。
|
|
返回顶楼 | |
发表时间:2009-06-02
如果是有中文,楼上的MAX_CHAR 就需要比较大了,对于那些java搞出来的算法,感觉效率很难说的,好多东西都是人家实现的。
|
|
返回顶楼 | |
发表时间:2009-06-02
抛出异常的爱 写道 被同事BS了
public static void main(String arg[]){ String test = "tatleae"; char[] array = test.toCharArray(); for(char tmp : array){ if(test.indexOf(tmp)==test.lastIndexOf(tmp)){ System.out.println(tmp); break; } } } 我喜欢这个实现,同时看出我还差得很远啊 |
|
返回顶楼 | |
发表时间:2009-06-02
ywlqi 写道 抛出异常的爱 写道 被同事BS了
public static void main(String arg[]){ String test = "tatleae"; char[] array = test.toCharArray(); for(char tmp : array){ if(test.indexOf(tmp)==test.lastIndexOf(tmp)){ System.out.println(tmp); break; } } } 我喜欢这个实现,同时看出我还差得很远啊 方便是方便,效率呢? |
|
返回顶楼 | |