锁定老帖子 主题:面试题目字符统计
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-03
而且这是笔试题目,笔试是有时间限制的,用这些最底层的代码来写做这样的题目,
花的时间很长。当然现在不是笔试,你可以在机器上面运行无数遍了然后把代码贴过来, 我们要的是速度和规则来解这类题目,凡事有规律了,当然就好做了! |
|
返回顶楼 | |
发表时间:2009-06-03
最后修改:2009-06-03
楼主 写道
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final Tongji other = (Tongji) obj; if (ch != other.ch) return false; if (count == other.count) { other.count++; } return true; } 我觉得equals不能这样来用,使用equals要满足 自反性 a.equals(a) is true; 对称性 a.equals(b) = b.equals(a); 传递性 a.equals(b) = true b.equals(c) = true 那么 a.equals(c) = true; 一致性 任何时候调用a.equals(b)得到的结果都是一样的。 |
|
返回顶楼 | |
发表时间:2009-06-03
cy729215495 写道 这么多的答案,我原本写这个程序是唤醒大家算法问题用面向对象的方法来做很好很强大,用c当然可以实现。
现在如果题目改为求统计重复字符串的个数,怎么做呢?希望大家接着往下面做! 个数不爽.... 最长自反字符串好玩一些. abcdeacdrtt=>cd(2) |
|
返回顶楼 | |
发表时间:2009-06-03
我感觉像这样的笔试题,主要考察的还是效率方面,要首先以O(n)为基准点。
不使用类库的为好! 之前用C的那个程序和对应的JAVA版本,都挺好的。 |
|
返回顶楼 | |
发表时间:2009-06-03
统计重复个数的用上面那个c程序对应的java版改动一下就可以了:
public class firstNonRepeatedChar { private static final int MAX_CHAR = 256; public static void main(String[] args) { String str = "tootaddl"; int count = firstNoRepeatedChar(str); System.out.println(count); } public static int firstNoRepeatedChar(String str) { int i = 0; int j = 0; int count = 0; int[] p = new int[MAX_CHAR]; char[] chars = str.toCharArray(); //初始化数组p,p用于保存字符出现的次数 for (j = 0; j < MAX_CHAR; j++) { p[j] = 0; } //统计字符出现的次数 for(i=0;i<chars.length;i++){ p[chars[i]]++; } for(int n=0;n<MAX_CHAR;n++){ if(p[n]>1) count++; } return count; } } |
|
返回顶楼 | |
发表时间:2009-06-05
case0079 写道 那个C程序是用空间换时间.
实际使用中感觉还是LINKEDHASHMAP稳定些. 这个空间开销很小的 如果有中文,开销要大些 |
|
返回顶楼 | |
发表时间:2009-06-05
cy729215495 写道 而且这是笔试题目,笔试是有时间限制的,用这些最底层的代码来写做这样的题目,
花的时间很长。当然现在不是笔试,你可以在机器上面运行无数遍了然后把代码贴过来, 我们要的是速度和规则来解这类题目,凡事有规律了,当然就好做了! 这个题目的C语言版本很快的,熟悉的人几分钟就OK了。 比如说一个题目需要用hash表来解决,一个人是用c语言实现了自己的hash结构,一个人是用的类库。 你喜欢哪个人? |
|
返回顶楼 | |
发表时间:2009-07-16
String str="toaltoa";
for(int i=0; i<str.length(); i++){ int count=0; for(int j=0; j<str.length(); j++){ if(String.valueOf(str.charAt(i)).equals(String.valueOf(str.charAt(j)))){ count+=1; } } if(count==1){ System.out.print(str.charAt(i)); break; } } |
|
返回顶楼 | |
发表时间:2009-07-17
google_fans 写道 cy729215495 写道 而且这是笔试题目,笔试是有时间限制的,用这些最底层的代码来写做这样的题目,
花的时间很长。当然现在不是笔试,你可以在机器上面运行无数遍了然后把代码贴过来, 我们要的是速度和规则来解这类题目,凡事有规律了,当然就好做了! 这个题目的C语言版本很快的,熟悉的人几分钟就OK了。 比如说一个题目需要用hash表来解决,一个人是用c语言实现了自己的hash结构,一个人是用的类库。 你喜欢哪个人? 哦?就算是熟悉的人碰到这样的题目了,用算法几分钟就能搞定的人并不多吧。 |
|
返回顶楼 | |
发表时间:2009-07-20
我是根据异常兄的linkedHashMap改写的
统计字符串里面每个字母出现的频率 import java.util.LinkedHashMap; import java.util.Map.Entry; public class CountCharInString { public static void main(String[] args) { String str ="total"; char[] charArr = str.toCharArray(); LinkedHashMap<String, Integer> linkedMap = new LinkedHashMap<String, Integer>(); int count=1; for(char ch: charArr){ String chStr = ch+""; if(linkedMap.get(chStr)!=null){ linkedMap.put(chStr, linkedMap.get(chStr)+1); }else{ linkedMap.put(chStr, count); } } for(Entry<String, Integer> temp : linkedMap.entrySet()){ if(temp.getValue()!=null && temp.getKey()!=null){ System.out.println("key =" + temp.getKey()+",value ="+ temp.getValue()); } } } } |
|
返回顶楼 | |