李小凤

积分:60
发表主题:56
|
| 发表于 2009-06-23 17:20 资料 |
楼主 |
JAVA编程题:字符串"yekmaakkccekymbvb",求出字符串中有多少种字符,以及每个字符的个数? 回复1: 可以使用HashMap存储,对该字符串进行遍历。如果遍历的字符在Map中,则将Map中的数值取出来加1。如果没有则放进去。 回复2: 楼上说的不错,你自己看看API把它搞定吧,不难的. 回复3: 全是abcd之类的吗? 那不就26个字母么,遍历对比下就OK了啊。 回复4: 接分 回复5: - Java code
import java.util.*;
import java.util.Collections;
public class LetterCount
{
public void getLetterCount(String str)
{
ArrayList<String> lists = new ArrayList<String>();
HashSet<String> hset = new HashSet<String>();
char[] ss = str.toCharArray();
for(int i=0; i<ss.length; i++)
{
lists.add(String.valueOf(ss[i]));
hset.add(String.valueOf(ss[i]));
}
System.out.println("共有字母"+hset.size()+"个!");
Collections.sort(lists);
Iterator it = hset.iterator();
while(it.hasNext())
{
String os = (String)it.next();
int begin = lists.indexOf(os);
int last = lists.lastIndexOf(os);
int count = last-begin+1;
System.out.println("字母"+os+": 共"+count+"个");
}
}
public static void main(String[] args)
{
LetterCount lc = new LetterCount();
lc.getLetterCount(args[0]);
}
}
我的运行结果: D:backupmyclass>java LetterCount yekmaakkccekymbvb 共有字母8个! 字母k: 共4个 字母m: 共2个 字母a: 共2个 字母c: 共2个 字母y: 共2个 字母b: 共2个 字母v: 共1个 字母e: 共2个 解决后,请结贴! 回复6: 看了也学到了 回复7: public class LetterCount { public static void main(String[] args) { HashMap <String, Integer> map = new HashMap(); String str = args[0]; for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); String key = ch + ""; Integer count = map.get(ch + ""); map.put(key, map.get(key) == null ? 1 : ++count); } Set <String> set = map.keySet(); System.out.println("共有字母"+map.size()+"个"); for (String key : set) { System.out.println("字母" + key + ":共" + map.get(key) + "个"); } } }
回复8: 这个简单点 回复9: 在别的语言里,好想就不太好办 了吧, 回复10: 这道题目应该不只是考运算吧,我觉得是考效率的。 如果按照楼上的办法,用map,效率应该是n*n。 如果是我做,我想到的方法是,把a-Z作为26+26=52的数组a=[0,0,0,0,0,0,0,0,0,0,0...] 然后遍历字符串,对于每个数都减去a得到ASCII值,对应相加,例如: a[c-a]=a[2]+1=1 所以:a=[0,0,1,0,0,0...],遍历字符串可以得到个数。 再取出就好了。 时间复杂度为n而已,快了一倍,呵呵!~ 不知道有没有更好的办法呢? 回复11: package com.string; import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class StringL { private HashMap <String,Integer> hashMap = new HashMap <String,Integer>(); public void getString(String s){ String str ; for(int i=0;i <s.length();i++){ str = s.substring(i,i+1); if(hashMap.containsKey(str)){ int j=hashMap.get(str); hashMap.remove(str); hashMap.put(str, j+1); }else{ hashMap.put(str, 1); } } } public void getHashMap(){ Set <String> strings = hashMap.keySet(); Iterator <String> it = strings.iterator(); for(String ss:strings){ ss = it.next(); System.out.println(ss+":"+hashMap.get(ss)); } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub StringL sl =new StringL(); sl.getString("yekmaakkccekymbvb"); sl.getHashMap(); } } 回复12: string str = "89kds7f8sdfsjdfklds8f7sd7ufjsdf"; while (str.Length > 0) { System.out.println(string.Format("{0}:{1}个",str[0],str.Length-str.Replace(str[0].ToString(),"").Length)); str = str.Replace(str[0].ToString(), ""); }
回复13: lz可以把所有能运行的方法都收藏...- Java code
public class NetWork1 {
public static void main(String[] args) {
while(true){
System.out.println("请输入你的字符串:");
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
try {
String str=reader.readLine();
count(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void count(String str) {
Map<Character ,Integer> m=new TreeMap<Character,Integer>();
char[] chars = str.toCharArray();
for (char c : chars) {
Integer num=m.get(c);
num=(num==null)?num=1:++num;
m.put(c, num);
}
System.out.println("字符的种类:"+m.size());
Set<Character> set=m.keySet();
for(Character ch:set){
System.out.println("字符"+ch+"有"+m.get(ch)+"个");
}
}
}
回复14: 顶 学习了 回复15: 学习 回复16: 顶一个 学习了 回复17: 学习! 回复18: 学习!
|
|
|
|
|