黑马程序员技术交流社区

标题: 一道排序题 [打印本页]

作者: 郝锡强    时间: 2011-12-19 21:55
标题: 一道排序题
本帖最后由 郝锡强 于 2011-12-20 19:34 编辑

给定一个字符串“asasdasdasdasdasdasdsa”输出字符和其出现的次数,格式如:a:5;s:6;d:6。。。
不是死排哟,我有一个方案是这样的,还有更好的思路,或者更易于理解的没
public class WordSort
{

   public  WordSort()
   {
   }
  public static void sort( char a[] ,char b[])
   {
    int i=0,j=0;
    char t1;
    char t2;
   
    for(i=0;i<b.length;i++)
    {
     for(j=i+1;j<b.length;j++)
     {
   if(b>b[j])
   {
     t1=b;b=b[j];b[j]=t1;
     t2=a;a=a[j];a[j]=t2;
   }
     }
    }
}
   public static void main(String[] args)
   {
  //WordSort  WordSort = new WordSort();
  String s=new String("sasadsadadadas");
  String s1="";
  String s2="";
  for(int i=0;i<s.length();i++)
  {
     char t0=s.charAt(i);
   if(s1.indexOf(t0)==-1)
   {  
    int t1=0;
    for(int j=i;j<s.length();j++)
    {
      if(t0==s.charAt(j))
   {
    t1++;
   }
    }
    s1+=t0;
    s2+=t1;
   }
  }
  System.out.println(s1);
     System.out.println(s2);
  char a[]=s1.toCharArray();
  char b[]=s2.toCharArray();
  sort(a,b);
  System.out.println();
  for(int i=0;i<a.length;i++)
  {
    System.out.print(a+"("+b+"次) " );
  }
  System.out.println();

   }
}




该贴已经同步到 郝锡强的微博
作者: 马德强    时间: 2011-12-19 22:57
  1. public static void main(String[] args) {
  2.                 TreeMap<Character,Integer> map=new TreeMap<Character,Integer>();
  3.                 String str="asdfasdf";
  4.                 Integer count=0;
  5.                 for (char c:str.toCharArray())
  6.                 {
  7.                         count=map.get(c);
  8.                         if(count==null)
  9.                                 count=0;
  10.                     map.put(c, ++count);
  11.                 }
  12.                 Set<Map.Entry<Character,Integer>> entry=map.entrySet();
  13.                 for(Map.Entry<Character,Integer> e:entry)
  14.                 {
  15.                         System.out.print(e.getKey()+"("+e.getValue()+"次) " );
  16.                 }
  17.                
  18.         }
复制代码
参考下.

作者: 李晓斌    时间: 2011-12-19 23:20
老毕基础班视频第16天上面有类似的,跟一楼那个差不多,是用集合来做的。
作者: 张帅    时间: 2011-12-19 23:28
我只提供一个思想啊,我也没试验下,这个东西叫 Trie树(字典树),只是有点查找的意思,貌似和这个帖子没多大关系
以下为转载  转载的地址:http://www.kuqin.com/algorithm/20111023/313292.html
  1. 什么是Trie树
  2. Trie树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。
  3. Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。

  4. 它有3个基本性质:
  5. 根节点不包含字符,除根节点外每一个节点都只包含一个字符。
  6. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
  7. 每个节点的所有子节点包含的字符都不相同。
复制代码

作者: 郝锡强    时间: 2011-12-20 11:27
本帖最后由 郝锡强 于 2011-12-20 19:34 编辑
马德强 发表于 2011-12-19 22:57
参考下.


貌似正解,我继续看看
一样不能对数量进行排序
作者: hello world    时间: 2011-12-20 13:16
public static void main(String[] args){
      String str = "asasdasdasdasdasdasdsa";
      char[] ch = str.toCharArray();
      int[] datas = new int[26];
      int len = ch.length;
      for(int i = 0; i < len; i++){
      int iii = (ch[i]-'a');
      datas[(ch[i]-'a')] ++ ;
      }
      
      for(int j = 0; j < datas.length; j++){
      if(datas[j] !=0)
      System.out.println("字符"+(char)(j+'a')+"出现了:"+datas[j]+"次" );
      }
      }
当然用MAP来的KEY来存26个字母,VALUE存出现的次数,这样做效率很高,你尝试用这种方式试试,我也去实现下,做好了交流下。


作者: 郝锡强    时间: 2011-12-20 17:29
本帖最后由 郝锡强 于 2011-12-20 19:30 编辑
刘向阳 发表于 2011-12-20 13:16
public static void main(String[] args){
      String str = "asasdasdasdasdasdasdsa";
      char[]  ...


高人,我试试
经验证,貌似能够统计字符,但是无法排序




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2