锁定老帖子 主题:面试题目
精华帖 (0) :: 良好帖 (0) :: 新手帖 (16) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-28
题目很简单:给你一个字符串,包含了空格等标点符号,要你计算出出现次数最多的字母和该字母出现的次数。 下面是我的方法 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 } } 这里有几个地方需要修改 我没有做修改 估计会出现内存溢出的问题 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-28
楼上实现的过于复杂了,贴一段我的实现,请各位拍砖:
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); } |
|
返回顶楼 | |
发表时间:2009-07-28
public static void main(String[] args) { String s= "sdfsddddddddddfffff,sdfsdf,"; s=s.replaceAll("[^a-zA-Z]",""); int max = 0; int temp = 0; String tempString = ""; for(int i = 0 ;i<s.length() ; i++ ){ tempString = s.substring(0,1); String subs = s.replace(s.substring(0,1),""); temp = s.length() - subs.length(); if(max<temp){ max=temp; } s = subs; } System.out.println(tempString+" max= "+max); } >_< |
|
返回顶楼 | |
发表时间:2009-07-28
这个在commons long 的包里面,有那个可以统计重复数量的set。直接用就可以了。
|
|
返回顶楼 | |
发表时间:2009-07-28
最后修改:2009-07-28
public class Test { public static void main(String[] args) { String str=" aaaaBBBBBBcdeFFFFFFFF "; int len=str.length(); char[] tmp=str.toCharArray(); int maxcount=0; char maxchar=0; int tempcount; for(int i=0;i<len;i++){ tempcount=0; for(int j=0;j<len;j++){ if(tmp[j]==tmp[i]) tempcount++; } if(tempcount>maxcount&&Character.isLetter(tmp[i])){ maxcount=tempcount; maxchar=tmp[i]; } } System.out.println(maxchar); System.out.println(maxcount); } } |
|
返回顶楼 | |
发表时间:2009-07-29
public static void main(String[] args) { String str="qiwerpis;lkzxnc;v"; Map map = new HashMap(); for(int i=0;i<str.length();i++) { Integer count = 0; if(!map.containsKey(str.charAt(i))) { map.put(str.charAt(i), 1); } else { count = (Integer)map.get(str.charAt(i)); count++; map.remove(str.charAt(i)); map.put(str.charAt(i),count); } } Set set =map.keySet(); Collection coll = map.values(); Iterator it = coll.iterator(); Iterator its = set.iterator(); while(it.hasNext()) { System.out.println(its.next()+" :"+it.next()); } } |
|
返回顶楼 | |
发表时间:2009-07-29
keyboardsun 写道 这个在commons long 的包里面,有那个可以统计重复数量的set。直接用就可以了。
这个我还真没用过,有空看看 |
|
返回顶楼 | |
发表时间:2009-07-29
这是考算法还是OO编程还是jdk?
|
|
返回顶楼 | |
发表时间:2009-07-29
char GetLetter(char *str,int&count)
{ if(str==null)return -1; int sum[26*2+6]={0}; count=0; retChar=-1; for(char *p=str;*p!='/0';p++) { char c=*p; if((c>= 65 &&c <= 90) || (c>= 97 && c<= 122)) sum[c-65]++; } for(int i=0;i<26*2+6;i++) { if(sum[i]<count)continue; count=sum[i]; retChar=i; } return retChar+65; } |
|
返回顶楼 | |
发表时间:2009-07-29
用过一个 Map 就可以了
key就放那个 字符(把整个String按字符拆了) value放出现次数 便利那个String拆分的数组 if(map.contions(a)){ map.put(a,map.get(a)+1); } else{ map.put(a,1); } 组后根据要求遍历map即可 |
|
返回顶楼 | |