- 浏览: 50226 次
- 性别:
- 来自: 深圳
最新评论
-
qbq:
执行下这个试试service.bat installservi ...
tomcat启动错误java.io.IOException: 文件名、目录名或卷标语法不正确。 -
yfkscu:
<p>一个时间复杂度 ...
面试题目 -
hngslifeng:
用数据库的方法可以解决,先每一个字母一个个插入数据库,然后按字 ...
面试题目 -
miaozp:
<p>String str = "qqq ...
面试题目 -
miaozp:
如果出现字母次数最多的是多个字母呢?
好些人把这种情况给忽略了 ...
面试题目
最近面试时碰到一道需要上机的题目要我用手写出来。我当时没做出来。回家后就自己写了下。可能不是最好的,但还是我自己做出来的欢迎拍砖
题目很简单:给你一个字符串,包含了空格等标点符号,要你计算出出现次数最多的字母和该字母出现的次数。
下面是我的方法
这里有几个地方需要修改 我没有做修改 估计会出现内存溢出的问题
一个问题,当有两或两个以上的字母出现的次数都是最大的时候,你这段代码只能找到一个,其他的结果都丢了。
笔试的话这几句不算多吧。
我估计你要佩服了,我看表的,6分钟用editplus写出来了.
你说的你的观点,其实代码行数是差不多的,
特地回去看了你的代码,没有前面那些人复杂,确实可以在6分钟内写出来。不过要我让我佩服,那就真不好意思了。我是考官只能给你70分。
对这种题目,我贴出个广大童鞋可以在3分钟内写出的代码(首先不考虑一些异常的控制,比如传空字符串等,这只是为了减少一些干扰),同时也让ww_java看看,两种代码的差别吧
得到的结果是
采用print2的速度要比print方法快了4倍。其实如果随着字符串的长度越长,速度的差别会更加明显。当然,我也并不是说这是什么最佳不最佳,速度的差别只是考虑的一个方面,没有必要纠缠是否还可以继续优化那么一点点。 各位童鞋好好从程序本身的复杂度来看看这两个方法吧。即使说不准用Arrays.sort方法,无非也就是多加一个快速排序(不会超过十分钟),而在print方法中我们也可以看到类似的Collections.max方法。
其实这是一个简单的笔试题,希望大家能清楚,凡事笔试的,都不会太复杂或者繁琐,它考察的点究竟在哪里。
我估计你要佩服了,我看表的,6分钟用editplus写出来了.
你说的你的观点,其实代码行数是差不多的,
题目很简单:给你一个字符串,包含了空格等标点符号,要你计算出出现次数最多的字母和该字母出现的次数。
下面是我的方法
package demo; import java.util.*; import com.sun.org.apache.bcel.internal.generic.NEW; public class TestClass { /** * @param args */ //去重复字母Map private static Map<String, String> chMap = new HashMap<String, String>(); //对每个字母个数进行保存Map,后面的value可以不用List改成其他类型更好(Integer) private static Map<String, List> countMap = new HashMap<String, List>(); public static void main(String[] args) { // TODO Auto-generated method stub String str = "hello wolrd wlllkdsfhksadfls?sdfls sdf.pqyutgvAAAxzsdfs lsdfj,ljsfd ajfdsak sfksjdfisfsdkfj lsdfjsidf jsafdalsjfs sfskdfjs"; getChar(str); int chMpSize = chMap.size(); int countMapSize = countMap.size(); System.out.println("chMpSize: " + chMpSize ); System.out.println("countMapSize: " + countMapSize ); System.out.println("===================开始======================="); String [] sArray = str.split(""); List l = new ArrayList(); List countArray = new ArrayList(); for(int i=0;i<sArray.length;i++){ //System.out.println(i + " " + sArray[i]); //int flag = 0; if(!sArray[i].equals("") && !sArray[i].equals(" ") && !l.contains(sArray[i]) && !sArray[i].equals(",") &&!sArray[i].equals(".") && !sArray[i].equals("!") &&!sArray[i].equals("?")){ //l.add(sArray[i]); int num = countMap.get(sArray[i]).size(); countArray.add(num); } } //排序默认是升序 Arrays.sort(countArray.toArray()); Collections.reverse(countArray); //System.out.println(countArray.get(0)); int max = Integer.parseInt(countArray.get(0)+""); //System.out.println("tt" + sArray.length); for(int i=0;i<sArray.length;i++){ if(!sArray[i].equals("") && !sArray[i].equals(" ")&& !l.contains(sArray[i]) && !sArray[i].equals(",") &&!sArray[i].equals(".") && !sArray[i].equals("!") &&!sArray[i].equals("?")){ l.add(sArray[i]); int num = countMap.get(sArray[i]).size(); System.out.println("字母为: " + sArray[i] + " 次数: " + num); if(countArray != null && countArray.size()!=0 && max == num){ System.out.println("字母为: " + sArray[i] + " 最大次数 " + num); } } } } public static void getChar(String str){ //去掉空格 String[] s = str.split(" "); char [] c = null; if (s != null){ for(int i=0;i<s.length;i++){ c = s[i].toCharArray(); getChar(c); } } } public static void getChar(char [] ch){ if(ch != null && ch.length>0){ for(int i=0;i<ch.length;i++){ List list = new ArrayList(); String tmp = ch[i]+""; if(!tmp.equals(",") && !tmp.equals("!") && !tmp.equals("?") && !tmp.equals(".")){ //第一次 if(!chMap.containsKey(ch[i]+"")){ chMap.put(ch[i]+"", ch[i]+""); list.add(ch[i]); if(!countMap.containsKey(ch[i]+"")){ countMap.put(""+ch[i], list); } }else{ list = countMap.get(""+ch[i]); list.add(ch[i]); countMap.put(""+ch[i], list); } } } }//end if } }
这里有几个地方需要修改 我没有做修改 估计会出现内存溢出的问题
评论
73 楼
yfkscu
2009-12-02
<p>一个时间复杂度为n的算法,可能代码有点多。</p>
<p>呵呵,以可读性换取代码长度,应该还是值得的。<img src="/images/smiles/icon_smile.gif" alt=""></p>
<p> </p>
<p> </p>
<pre name="code" class="java">import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
public class TestClass {
public static void main(String[] args) {
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
String str = "aabbccbddeeaabbdflksajfldsjal;fjdl;skajlfdjs;lajflueiowjfldskj";
int len = str.length();
for (int i = 0; i < len; i++) {
char c = str.charAt(i);
if (map.containsKey(c)) {
map.put(c, map.get(c) + 1);
} else {
map.put(c, 1);
}
}
// 得到最大的出现次数
int maxValue = 0;
for (Iterator<Entry<Character, Integer>> iter = map.entrySet()
.iterator(); iter.hasNext();) {
Entry<Character, Integer> entry = iter.next();
int value = entry.getValue();
if (value >= maxValue) {
maxValue = value;
}
}
//取出出现次数最多的字母和对应的次数
for (Iterator<Entry<Character, Integer>> iter = map.entrySet()
.iterator(); iter.hasNext();) {
Entry<Character, Integer> entry = iter.next();
char key = entry.getKey();
int value = entry.getValue();
if (value == maxValue) {
System.out.println("出现次数最多的字母为:" + key + " 出现次数为:" + value);
}
}
}
}</pre>
<p> 输出结果为:</p>
<p>
</p>
<p>出现次数最多的字母为:a 出现次数为:8</p>
<p>出现次数最多的字母为:l 出现次数为:8</p>
<p>出现次数最多的字母为:j 出现次数为:8</p>
<p> </p>
<p>呵呵,以可读性换取代码长度,应该还是值得的。<img src="/images/smiles/icon_smile.gif" alt=""></p>
<p> </p>
<p> </p>
<pre name="code" class="java">import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
public class TestClass {
public static void main(String[] args) {
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
String str = "aabbccbddeeaabbdflksajfldsjal;fjdl;skajlfdjs;lajflueiowjfldskj";
int len = str.length();
for (int i = 0; i < len; i++) {
char c = str.charAt(i);
if (map.containsKey(c)) {
map.put(c, map.get(c) + 1);
} else {
map.put(c, 1);
}
}
// 得到最大的出现次数
int maxValue = 0;
for (Iterator<Entry<Character, Integer>> iter = map.entrySet()
.iterator(); iter.hasNext();) {
Entry<Character, Integer> entry = iter.next();
int value = entry.getValue();
if (value >= maxValue) {
maxValue = value;
}
}
//取出出现次数最多的字母和对应的次数
for (Iterator<Entry<Character, Integer>> iter = map.entrySet()
.iterator(); iter.hasNext();) {
Entry<Character, Integer> entry = iter.next();
char key = entry.getKey();
int value = entry.getValue();
if (value == maxValue) {
System.out.println("出现次数最多的字母为:" + key + " 出现次数为:" + value);
}
}
}
}</pre>
<p> 输出结果为:</p>
<p>
</p>
<p>出现次数最多的字母为:a 出现次数为:8</p>
<p>出现次数最多的字母为:l 出现次数为:8</p>
<p>出现次数最多的字母为:j 出现次数为:8</p>
<p> </p>
72 楼
hngslifeng
2009-11-29
用数据库的方法可以解决,先每一个字母一个个插入数据库,然后按字母名称count() group by下,就知道那个字母出现次数最多了
71 楼
miaozp
2009-11-27
<p>String str = "qqqqqaaaaa11aaxxrrrrrrr";// 需要统计的字符串<br> char[] strchars = str.toCharArray();<br> long maxnum = 0;// 最大出现次数<br> Map letters = new HashMap();// 保存统计出现最多字母的集合<br> for (int i = 0; i < strchars.length; i++) {<br> String key = strchars[i] + "";<br> if (Character.isLetter(strchars[i])) {<br> long beforLen = str.length();// 替换之前<br> str = str.replaceAll(key, "");<br> long afterLen = str.length();// 替换之后<br> long findnum = beforLen - afterLen;// 出现次数<br> if (maxnum < findnum) {<br> maxnum = findnum;<br> letters.clear();// 清空集合<br> letters.put(key, new Long(maxnum));// 记录出现最多字母<br> } else if (maxnum == findnum && letters.get(key) == null) {// 出现次数一样,并且未曾记录<br> letters.put(key, new Long(maxnum));// 记录出现最多字母<br> }<br> }<br> }<br> Iterator it = letters.entrySet().iterator();<br> while (it.hasNext()) {<br> Map.Entry entry = (Map.Entry) it.next();<br> System.out.println("字母:" + entry.getKey());<br> System.out.println("次数:" + entry.getValue());<br> }</p>
70 楼
miaozp
2009-11-27
如果出现字母次数最多的是多个字母呢?
好些人把这种情况给忽略了
好些人把这种情况给忽略了
69 楼
zhaoyta
2009-11-26
package test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class StaticStr { public static void main(String[] args) { Map<Character,Integer> map = new TreeMap<Character,Integer>(new CharComparator()); String str = "abbcAAAZZ.x.m .. .fdZZxxaaaaZ"; List<Compound> result = new ArrayList<Compound>(); char[] chararr = str.toCharArray(); for(int i=0;i<chararr.length;i++) { if(!(chararr[i] >='A' && chararr[i] <='Z')&&!(chararr[i] >='a' && chararr[i] <='z')) continue; Integer num = (Integer)map.get(chararr[i]); if(num==null) { map.put(chararr[i], 1); }else { num++; map.put(chararr[i], num); } } Set<Map.Entry<Character,Integer>> set = map.entrySet(); for(Map.Entry entry:set) { Compound c = new Compound(); c.key = (Character) entry.getKey(); c.value = (Integer) entry.getValue(); result.add(c); } Collections.sort(result); Compound maxChar = result.get(0); int maxNum = maxChar.value; int i = 0; do{ i++; System.out.println("Max num char:"+maxChar.key+" count:"+maxChar.value); }while(( maxChar = result.get(i))!=null&&maxChar.value==maxNum); } public static final class CharComparator implements Comparator<Character> { public int compare(Character o1, Character o2) { char v1 = o1; char v2 =o2; if(v1==v2) return 0; else if(v1<v2) return 1; else return -1; } } public static final class Compound implements Comparable<Compound> { private char key; private int value; public int compareTo(Compound o) { if(this.value>o.value) return -1; else if(this.value==o.value) return 0; else return 1; } } }
68 楼
weiqiang.yang
2009-11-17
路过,我觉得是不是真的有必要上Map,List之类的容器
A-Z a-z就52个字符
A-Z a-z就52个字符
public static void main(String[] args) { int max = 0;// 记录最多次数 int count[] = new int[52];// 开个52的数组 String input = "abbcAAAZZ.x.m .. .fdZZxxaaaaZ"; for(int i=0;i<input.length();i++){ int index = 0; char letter = input.charAt(i); if(letter >='A' && letter <='Z'){ index = letter - 'A'; }else if(letter >='a' && letter <='z'){ index = letter - 'a' + 26; }else{// 其他字符 continue; } count[index]++; if(count[index] > max){ max = count[index]; } } // 最多的可能有多个,于是循环一下 for(int j=0;j<count.length;j++){ if(count[j] == max) System.out.println("max = "+max+", maxLetter = "+ (j<26?(char)('A'+j):(char)('a'+j-26))); } }
67 楼
zhzhxiqi
2009-09-20
lczheng 写道
楼上实现的过于复杂了,贴一段我的实现,请各位拍砖:
public static void main(String[] args) { Map<String,Long> charTimesMap = new HashMap<String,Long>(); String str = "hello wolrd wlllkdsfhksadfls?sdfls sdf.pqyutgvAAAxzsdfs lsdfj,ljsfd ajfdsak sfksjdfisfsdkfj lsdfjsidf jsafdalsjfs sfskdfjs"; for (char each : str.toCharArray()) { if ((each >= 65 && each <= 90) || (each >= 97 && each <= 122)) { String charStr = String.valueOf(each); if (charTimesMap.containsKey(charStr)) { Long num = charTimesMap.get(charStr).longValue() + 1; charTimesMap.put(charStr, num); } else { charTimesMap.put(charStr, 1L); } } } String maxAppearChar = null; Long maxAppearTimes = 0L; for (Map.Entry<String, Long> charAppear : charTimesMap.entrySet()) { if (charAppear.getValue() > maxAppearTimes) { maxAppearChar = charAppear.getKey(); maxAppearTimes = charAppear.getValue(); } } System.out.println("出现最多的字母:"+maxAppearChar); System.out.println("出现次数:"+maxAppearTimes); }
一个问题,当有两或两个以上的字母出现的次数都是最大的时候,你这段代码只能找到一个,其他的结果都丢了。
66 楼
凤舞凰扬
2009-09-07
楼主好像没有说这是算法题,不是考编程吧?从楼主的帖子你也可以看得出啊!理解面试中对于笔试的要求是非常重要的(如果只是考算法,用这样的题目就未免太简单了吧,呵呵)。我都不清楚楼上如何得出个这样的结论的.......
至于说,在笔试题中使用了Collections就得BS,怕是楼上你的误区吧。如果是考编程题目,也就是考你基础应用编程的能力(一个有一些开发经验的程序员和完全没有开发经验的学生,差距就是在这里了),公司需要的更倾向的是能够应用的程序员,而不是一套套算法理论的学生的。
最后给楼上总结下:
1. 如果公司想考算法,想了解思维能力,绝对不会用这么简单的题目,起码也得弄个和高程(现在好像叫软件设计师吧)差不多水平的说。至少也要高过学校所学的。
2. 这样的题目一般也会明确使用某种特定的语言的(当然我假设java),否则,程序写出来,考官未必都能够准确评分。
3. 对于这样的笔试题,请一定从简单入手,不要整得那么复杂,也别想得那么复杂。笔试从来只是入门坎,而不是评优。
至于说,在笔试题中使用了Collections就得BS,怕是楼上你的误区吧。如果是考编程题目,也就是考你基础应用编程的能力(一个有一些开发经验的程序员和完全没有开发经验的学生,差距就是在这里了),公司需要的更倾向的是能够应用的程序员,而不是一套套算法理论的学生的。
最后给楼上总结下:
1. 如果公司想考算法,想了解思维能力,绝对不会用这么简单的题目,起码也得弄个和高程(现在好像叫软件设计师吧)差不多水平的说。至少也要高过学校所学的。
2. 这样的题目一般也会明确使用某种特定的语言的(当然我假设java),否则,程序写出来,考官未必都能够准确评分。
3. 对于这样的笔试题,请一定从简单入手,不要整得那么复杂,也别想得那么复杂。笔试从来只是入门坎,而不是评优。
65 楼
rabbitbug
2009-09-04
这是算法题,不是java题,当然你可以用java写
如果用到Collections类的方法,那要被面试管BS的,一般就是理解错了这个题目的意思,如果要考Collections类的方法,就会考更复杂的问题了
这种算法题要用最简单的方法实现,占空间少,执行越快越好
如果循环肯定也是要BS的
这个算法只要O(n)就行了
如果用到Collections类的方法,那要被面试管BS的,一般就是理解错了这个题目的意思,如果要考Collections类的方法,就会考更复杂的问题了
这种算法题要用最简单的方法实现,占空间少,执行越快越好
如果循环肯定也是要BS的
这个算法只要O(n)就行了
64 楼
凤舞凰扬
2009-08-26
楼上的想法还是不错,有新意。反正ASCII字符也就最多255个,数组每个下标对应该字符出现的值。
p.s 不过这个biggestCount的取名有些意思~~~~
p.s 不过这个biggestCount的取名有些意思~~~~
63 楼
Bernard
2009-08-26
String str = "hello wolrd wlllkdsfhksadfls?sdfls sdf.pqyutgvAAAxzsdfs " + "lsdfj,ljsfd ajfdsak sfksjdfisfsdkfj lsdfjsidf jsafdalsjfs sfskdfjs"; int[] strCounts = new int[255]; int biggestCount = 0; char biggestCh = 0; char ch = 0; int currentCount = 0; for (int i = str.length() - 1; i >= 0; i--) { ch = str.charAt(i); currentCount = ++strCounts[ch]; if (currentCount > biggestCount) { biggestCount = currentCount; biggestCh = ch; } } System.out.println(biggestCh); System.out.println(biggestCount); /** * 100,000 * 295 * 239 * 265 */
笔试的话这几句不算多吧。
62 楼
凤舞凰扬
2009-08-26
ww_java 写道
凤舞凰扬 写道
看完楼上各位童鞋的回帖,简直要崩溃了~~~~~~~
我估计没有几个人搞懂了面试官究竟是想考什么,楼上各位如果可以在笔试阶段画上15分钟把你们的代码用纸笔写出来,我真还服了你们了。
哎...........
我估计没有几个人搞懂了面试官究竟是想考什么,楼上各位如果可以在笔试阶段画上15分钟把你们的代码用纸笔写出来,我真还服了你们了。
哎...........
我估计你要佩服了,我看表的,6分钟用editplus写出来了.
你说的你的观点,其实代码行数是差不多的,
特地回去看了你的代码,没有前面那些人复杂,确实可以在6分钟内写出来。不过要我让我佩服,那就真不好意思了。我是考官只能给你70分。
对这种题目,我贴出个广大童鞋可以在3分钟内写出的代码(首先不考虑一些异常的控制,比如传空字符串等,这只是为了减少一些干扰),同时也让ww_java看看,两种代码的差别吧
<script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/themes/advanced/langs/zh.js"></script><script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/plugins/javaeye/langs/zh.js"></script> import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; public class ClassA { private Map<Character, Integer> getToken(String str) { Map<Character, Integer> token = new LinkedHashMap<Character, Integer>(); for (int i = 0; i < str.length(); i++) { if (token.get(str.charAt(i)) != null) { token.put(str.charAt(i), token.get(str.charAt(i)) + 1); } else { token.put(str.charAt(i), 1); } } return token; } public void print(String str, boolean print) { Map<Character ,Integer> token = getToken(str) ; Iterator<Character> iterator = token.keySet().iterator(); int max = Collections.max(token.values()); while(iterator.hasNext()){ Character c = iterator.next(); if(token.get(c).compareTo(max) == 0){ if (print) { System.out.println(c +" = "+token.get(c)); } } } } public void print2(String s, boolean print) { char[] chars = s.toCharArray(); Arrays.sort(chars); int i = 0 ; int maxCount = 0 ; char maxChar = ' '; char last = ' '; for (char c : chars) { if (last != c) { if (i > maxCount) { maxCount = i ; maxChar = last ; } last = c ; i = 0 ; } i ++ ; } if (print) { System.out.println(maxChar + " = "+ maxCount); } } public static void main(String[] args) { String s = "jdkfjw,.oeto,.34utkgf.syf9w ,e7r23, haerhyqbkbwkhjgosu9asuf9qojekogtjalugf9qu7r13htfn"; ClassA a = new ClassA(); a.print(s, true); System.out.println("--------------------"); a.print2(s, true); long start = System.currentTimeMillis() ; for (int i = 0; i < 10000; i++) { a.print(s, false); } long end = System.currentTimeMillis() ; System.out.println("execute print method cost: "+(end - start)); start = System.currentTimeMillis() ; for (int i = 0; i < 10000; i++) { a.print2(s, false); } end = System.currentTimeMillis() ; System.out.println("execute print2 method cost: "+(end - start)); } }
得到的结果是
f = 6 -------------------- f = 6 execute print method cost: 328 execute print2 method cost: 94
采用print2的速度要比print方法快了4倍。其实如果随着字符串的长度越长,速度的差别会更加明显。当然,我也并不是说这是什么最佳不最佳,速度的差别只是考虑的一个方面,没有必要纠缠是否还可以继续优化那么一点点。 各位童鞋好好从程序本身的复杂度来看看这两个方法吧。即使说不准用Arrays.sort方法,无非也就是多加一个快速排序(不会超过十分钟),而在print方法中我们也可以看到类似的Collections.max方法。
其实这是一个简单的笔试题,希望大家能清楚,凡事笔试的,都不会太复杂或者繁琐,它考察的点究竟在哪里。
61 楼
ww_java
2009-08-25
凤舞凰扬 写道
看完楼上各位童鞋的回帖,简直要崩溃了~~~~~~~
我估计没有几个人搞懂了面试官究竟是想考什么,楼上各位如果可以在笔试阶段画上15分钟把你们的代码用纸笔写出来,我真还服了你们了。
哎...........
我估计没有几个人搞懂了面试官究竟是想考什么,楼上各位如果可以在笔试阶段画上15分钟把你们的代码用纸笔写出来,我真还服了你们了。
哎...........
我估计你要佩服了,我看表的,6分钟用editplus写出来了.
你说的你的观点,其实代码行数是差不多的,
60 楼
凤舞凰扬
2009-08-24
看完楼上各位童鞋的回帖,简直要崩溃了~~~~~~~
我估计没有几个人搞懂了面试官究竟是想考什么,楼上各位如果可以在笔试阶段画上15分钟把你们的代码用纸笔写出来,我真还服了你们了。
哎...........
我估计没有几个人搞懂了面试官究竟是想考什么,楼上各位如果可以在笔试阶段画上15分钟把你们的代码用纸笔写出来,我真还服了你们了。
哎...........
59 楼
凤舞凰扬
2009-08-24
天啦,楼主这样写啊,这是笔试题哦,如果答案是这样,考官都郁闷死了,谁会去看呢?
这样的题目其实非常简单啊~~~先对字符串的内容排序(也可以变成字符数组排序),然后循环一下就可以了啊!
只需要保留一个int变量保存上一个不同字符出现的个数就可以了。(如果考手写,使用commons-lang其实不太可能的)
各位童鞋啊,如果笔试遇到这类问题,而且还是手写的,尽量往简单的想!
这样的题目其实非常简单啊~~~先对字符串的内容排序(也可以变成字符数组排序),然后循环一下就可以了啊!
只需要保留一个int变量保存上一个不同字符出现的个数就可以了。(如果考手写,使用commons-lang其实不太可能的)
各位童鞋啊,如果笔试遇到这类问题,而且还是手写的,尽量往简单的想!
58 楼
balan326
2009-08-24
你们是学JAVA的也,一点OOP的思想都没有,
57 楼
balan326
2009-08-24
yenan354 写道
姐姐,发代码的时候请用[1code=1"1java1"][/1code1]括起来
test方法中的第一个for 循环的最后一句有逻辑错误。我在你的基础上修改了一下,同时也支持多个字符相同的情况。 (我晕死,你不看下方法就乱说我错误,我的setNum方法里怎么写的你没看到哦,我是写的this.num+=num,看人家的代码也不看仔细,每个人写代码的习惯不同好不好,)
test方法中的第一个for 循环的最后一句有逻辑错误。我在你的基础上修改了一下,同时也支持多个字符相同的情况。 (我晕死,你不看下方法就乱说我错误,我的setNum方法里怎么写的你没看到哦,我是写的this.num+=num,看人家的代码也不看仔细,每个人写代码的习惯不同好不好,)
public void test(String str) { List list = new ArrayList(); for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); StrObject so = new StrObject(); so.setName(c); so.setNum(1); StrObject s = getObject(list, so); if (s == null) list.add(so); else s.setNum(s.getNum() + 1); } StrObject strObject = null; Vector v = new Vector(); for (int i = 0; i < list.size() - 1; i++) { if (strObject == null) { strObject = (StrObject) list.get(i); v.add(strObject); continue; } StrObject so = (StrObject) list.get(i); if (so.getNum() > strObject.getNum()){ strObject = so; v.clear(); v.add(so); } if (so.getNum() == strObject.getNum()){ v.add(so); } } Iterator it = v.iterator(); while(it.hasNext()){ strObject = (StrObject)it.next(); System.out.println("出现次数最多的:" + strObject.getName() + " 数量:" + strObject.getNum()); } }
56 楼
zhuzhu1124
2009-08-22
//简单实现了一下楼上的
import java.util.*;
public class Count {
public static void main(String[] args) {
String str = "hello wolrd wlllkdsfhksadfls?sdfls sdf.pqyutgvAAAxzsdfs lsdfj,ljsfd ajfdsak sfksjdfisfsdkfj lsdfjsidf jsafdalsjfs sfskdfjs";
Map<Character,Integer> charMap = new HashMap<Character,Integer>();
for(char each : str.toCharArray()) {
if(charMap.containsKey(each)) {
charMap.put(each,charMap.get(each) + 1);
}else {
charMap.put(each,1);
}
}
Set set =charMap.keySet(); ///获得KEY
Collection coll = charMap.values(); ///获得VALUE
Iterator it = coll.iterator();
Iterator its = set.iterator();
while(it.hasNext())
{
System.out.println(its.next()+" :"+it.next());
}
}
}
import java.util.*;
public class Count {
public static void main(String[] args) {
String str = "hello wolrd wlllkdsfhksadfls?sdfls sdf.pqyutgvAAAxzsdfs lsdfj,ljsfd ajfdsak sfksjdfisfsdkfj lsdfjsidf jsafdalsjfs sfskdfjs";
Map<Character,Integer> charMap = new HashMap<Character,Integer>();
for(char each : str.toCharArray()) {
if(charMap.containsKey(each)) {
charMap.put(each,charMap.get(each) + 1);
}else {
charMap.put(each,1);
}
}
Set set =charMap.keySet(); ///获得KEY
Collection coll = charMap.values(); ///获得VALUE
Iterator it = coll.iterator();
Iterator its = set.iterator();
while(it.hasNext())
{
System.out.println(its.next()+" :"+it.next());
}
}
}
55 楼
yenan354
2009-08-22
姐姐,发代码的时候请用[1code=1"1java1"][/1code1]括起来
test方法中的第一个for 循环的最后一句有逻辑错误。我在你的基础上修改了一下,同时也支持多个字符相同的情况。
test方法中的第一个for 循环的最后一句有逻辑错误。我在你的基础上修改了一下,同时也支持多个字符相同的情况。
public void test(String str) { List list = new ArrayList(); for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); StrObject so = new StrObject(); so.setName(c); so.setNum(1); StrObject s = getObject(list, so); if (s == null) list.add(so); else s.setNum(s.getNum() + 1); } StrObject strObject = null; Vector v = new Vector(); for (int i = 0; i < list.size() - 1; i++) { if (strObject == null) { strObject = (StrObject) list.get(i); v.add(strObject); continue; } StrObject so = (StrObject) list.get(i); if (so.getNum() > strObject.getNum()){ strObject = so; v.clear(); v.add(so); } if (so.getNum() == strObject.getNum()){ v.add(so); } } Iterator it = v.iterator(); while(it.hasNext()){ strObject = (StrObject)it.next(); System.out.println("出现次数最多的:" + strObject.getName() + " 数量:" + strObject.getNum()); } }
54 楼
balan326
2009-08-21
用JAVA写,当然要用OOP的思想了,
/*******************************************************
实体类
package Str;
public class StrObject
{
private char name;
private int num;
/**
* @return the name
*/
public char getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(char name) {
this.name = name;
}
/**
* @return the num
*/
public int getNum() {
return num;
}
/**
* @param num the num to set
*/
public void setNum(int num) {
this.num += num;
}
}
/*************************************************************************
/*************************************************************************
主类
package Str;
import java.util.*;
public class Test
{
public static void main(String[] args)
{
String str = "asdfasd asdfwe.asdfasd,erytkcvm,drty sdflkjgsdyvv5458sdgf 454df21f455asdf2r";
Test test = new Test();
test.test(str);
}
public void test(String str)
{
List list = new ArrayList();
for (int i = 0; i < str.length(); i++)
{
char c = str.charAt(i);
StrObject so = new StrObject();
so.setName(c);
so.setNum(1);
StrObject s = getObject(list, so);
if(s == null)
list.add(so);
else
s.setNum(1);
}
StrObject strObject = null;
for (int i = 0; i < list.size()-1; i++)
{
if(strObject == null)
{
strObject = (StrObject) list.get(i);
continue;
}
StrObject so = (StrObject) list.get(i);
if(so.getNum() > strObject.getNum())
strObject = so;
}
System.out.println("出现次数最多的:"+strObject.getName()+" 数量:"+strObject.getNum());
}
public StrObject getObject(List list,StrObject so)
{
for (int i = 0; i < list.size(); i++)
{
StrObject s = (StrObject) list.get(i);
if(s.getName() == so.getName())
return s;
else
continue;
}
return null;
}
}
/********************************************************************************
/*******************************************************
实体类
package Str;
public class StrObject
{
private char name;
private int num;
/**
* @return the name
*/
public char getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(char name) {
this.name = name;
}
/**
* @return the num
*/
public int getNum() {
return num;
}
/**
* @param num the num to set
*/
public void setNum(int num) {
this.num += num;
}
}
/*************************************************************************
/*************************************************************************
主类
package Str;
import java.util.*;
public class Test
{
public static void main(String[] args)
{
String str = "asdfasd asdfwe.asdfasd,erytkcvm,drty sdflkjgsdyvv5458sdgf 454df21f455asdf2r";
Test test = new Test();
test.test(str);
}
public void test(String str)
{
List list = new ArrayList();
for (int i = 0; i < str.length(); i++)
{
char c = str.charAt(i);
StrObject so = new StrObject();
so.setName(c);
so.setNum(1);
StrObject s = getObject(list, so);
if(s == null)
list.add(so);
else
s.setNum(1);
}
StrObject strObject = null;
for (int i = 0; i < list.size()-1; i++)
{
if(strObject == null)
{
strObject = (StrObject) list.get(i);
continue;
}
StrObject so = (StrObject) list.get(i);
if(so.getNum() > strObject.getNum())
strObject = so;
}
System.out.println("出现次数最多的:"+strObject.getName()+" 数量:"+strObject.getNum());
}
public StrObject getObject(List list,StrObject so)
{
for (int i = 0; i < list.size(); i++)
{
StrObject s = (StrObject) list.get(i);
if(s.getName() == so.getName())
return s;
else
continue;
}
return null;
}
}
/********************************************************************************
相关推荐
[消防文员面试题目]消防面试题目.pdf
Java常见笔试_面试题目深度剖析
这份资源"Java常见笔试、面试题目深度剖析"显然是为了帮助求职者更好地准备相关考试而设计的。以下将对Java笔试和面试的一些核心知识点进行详细的阐述: 1. **基础语法**:Java的基础包括变量、数据类型、运算符、...
标题 "iOS 面试题目及答案" 指出了文件内容主要围绕iOS开发相关的面试题目和答案展开,覆盖了iOS开发中的一些核心概念和技术点。描述部分说明这些面试题目非常全面,涉及了Objective-C、Cocoa Touch以及Xcode的使用...
Java常见笔试,面试题目深度剖析
数通HCIE RS面试题目解析 在计算机网络领域,HCIE(Huawei Certified Internetwork Expert)是华为公司推出的认证项目之一,旨在评估网络工程师的技术能力和实践经验。HCIE RS( Routing and Switching)是HCIE认证...
部分面试题目如下: 自我介绍 成绩排名简单介绍 项目介绍:最难的地方,创新点 最有压力的时候,如何处理 英语水平 对德赛西威的认识 如何看待卷 如何看待加班 ### 德赛西威面试经历分享 德赛西威作为一家知名的...
本压缩包包含的“ASP.NET上海面试题目(经典)”资料,提供了130道面试题目,涵盖了ASP.NET、SQL Server等关键知识点,对于准备在上海地区寻求ASP.NET相关工作的求职者来说,具有很高的参考价值。 以下是部分题目...
这份"大公司C++面试题目集锦"包含的两份文档——"c++试题(1).doc"和"c++试题(2).doc",无疑是帮助你巩固知识、提升技能的关键资源。以下是基于这些文件可能涵盖的一些重要知识点的详细解析: 1. **基础语法**:...
"C++面试题目分析" 本文档提供了17道经典的C++面试题目,涵盖了C++语言的各种基础语法和算法,包括字符串处理、数字处理、数组处理等。每个题目都提供了详细的解释和参考答案,旨在帮助读者更好地理解C++语言的实现...
华为公司作为全球知名的IT巨头,其面试题目往往涵盖了计算机科学和技术的多个领域,旨在测试应聘者的综合素质和专业技能。从提供的文件名来看,我们可以推测这些面试题目可能涉及到算法、技术支持以及可能的一些行业...
【标题】:“2018最新BAT+面试题目”涵盖了中国顶级互联网公司——百度(Baidu)、阿里巴巴(Alibaba)和腾讯(Tencent)在2018年招聘过程中的热门面试问题。这些题目旨在测试候选人在技术、逻辑思维、问题解决以及...
"广电面试题目.pdf" 本资源文件提供了面试题目和答案,涵盖了客服人员的知识点和技能要求。下面是对标题、描述、标签和部分内容的详细解释和知识点总结: 客服人员基本素质 1. 热爱企业,热爱岗位 2. 热情主动的...
**Windchill常见面试题目汇总** Windchill是一款由PTC公司开发的基于Web的企业产品生命周期管理(PLM)系统,主要用于产品数据管理和协同工作。它涵盖了产品设计、工程、制造、服务等整个生命周期,旨在提高产品的...
《世界500强面试题目及评点》是两份重要的资源,主要针对那些渴望进入全球顶级企业工作的人群。这些公司通常会设置独特的面试环节,以全面评估候选人的综合素质和专业技能。以下是对这两部分内容的详细解读。 在500...
本资料包“c++面试题目题目集合 完美的笔试面试”包含了丰富的C++面试题,旨在帮助求职者提升应对笔试和面试的能力。 一、C++基础 1. **变量与数据类型**:理解基本数据类型(如int, float, double, char)以及...
以下是对这些面试题目的知识点解析: 1. 自我介绍: - 强调个人基本信息,包括姓名、经历、思想动态、特长和爱好,这有助于面试官了解候选人的背景和性格特点。 - 报考动机和工作设想,展示候选人对职位的理解和...
### 数据结构面试题目解析 1. **题目一**:“链表与数组的不同之处” - 数组是顺序存储的,访问时间复杂度为O(1),但插入删除操作可能需要移动大量元素,时间复杂度为O(n)。 - 链表是链式存储,访问时间复杂度为O...