Leetcode 451. Sort Characters By Frequency JAVA语言

简介:
1
2
3
4
5
6
7
8
9
10
11
12
Given a string, sort it in decreasing order based on the frequency of characters.
Example 1:
Input:"tree"Output:"eert"Explanation:'e' appears twice while 'r' and 't' both appear once.
So 'e' must appear before both 'r' and 't'. Therefore "eetr" is also a valid answer.
 
Example 2:
Input:"cccaaa"Output:"cccaaa"Explanation:Both 'c' and 'a' appear three times, so "aaaccc" is also a valid answer.
Note that "cacaca" is incorrect, as the same characters must be together.
 
Example 3:
Input:"Aabb"Output:"bbAa"Explanation:"bbaA" is also a valid answer, but "Aabb" is incorrect.
Note that 'A' and 'a' are treated as two different characters.

题意:将字符串中字符按出现频率输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public  class  Solution {
     public  String frequencySort(String s) {
         if (s== null  || s.length()<= 2 ) return  s;
         int  length=s.length();
         //统计各个字符出现的次数
         HashMap<Character,Integer> map= new  HashMap<Character,Integer>();
         for ( int  i= 0 ;i<length;i++){
             char  c=s.charAt(i);
             if (map.containsKey(c)){
                 map.put(c,map.get(c)+ 1 );
             } else {
                 map.put(c, 1 );
             }
         }
         //sb1求出各种频率的字符
         //"eeeee"的时候,e出现了length次,所以申请的时候length+1
         StringBuilder[] sb1= new  StringBuilder[length+ 1 ];
         int  max= 0 ;
         for ( char  c : map.keySet()){
             int  fre=map.get(c);
             if (sb1[fre]== null ){
                 sb1[fre]= new  StringBuilder();
             }
             if (fre>max)max=fre;
             for ( int  i= 0 ;i<fre;i++){
                 sb1[fre].append(c);
             }
         }
         //最后ret把各种频率的字符由高到低连接起来
         StringBuilder ret= new  StringBuilder();
         for ( int  i=max;i> 0 ;i--){
             if (sb1[i]!= null )
             ret.append(sb1[i]);
         }
         return  ret.toString();
         //方法2;二维数组
         int [][] count= new  int [ 128 ][ 2 ];
         char [] ch=s.toCharArray();
         for ( char  c :ch){
             count[c][ 0 ]=c;
             count[c][ 1 ]++;
         }
         Arrays.sort(count, new  Comparator< int []>(){
                 public  int  compare( int [] a, int  []b){
                     return  b[ 1 ]-a[ 1 ];
                 }
             });
         StringBuilder ret= new  StringBuilder();
         for ( int  i= 0 ;i< 128 ;i++){
             for ( int  j= 0 ;j<count[i][ 1 ];j++){
                 ret.append(( char )count[i][ 0 ]);
             }
         }
         return  ret.toString();
     }
}

PS:计算各个字符频率,拼接。。。

群里大神说有用heap,消化不了。。。



本文转自 努力的C 51CTO博客,原文链接:http://blog.51cto.com/fulin0532/1902228

相关文章
|
11月前
|
JSON Java API
【干货满满】分享京东API接口到手价,用Java语言实现
本示例使用 Java 调用京东开放平台商品价格及优惠信息 API,通过商品详情和促销接口获取到手价(含优惠券、满减等),包含签名生成、HTTP 请求及响应解析逻辑,适用于比价工具、电商系统集成等场景。
|
9月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
547 18
|
9月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
401 4
|
10月前
|
存储 Java Apache
Java语言操作INI配置文件策略
以上步骤展示了基本策略,在实际项目中可能需要根据具体需求进行调整优化。例如,在多线程环境中操作同一份配置时需要考虑线程安全问题;大型项目可能还需考虑性能问题等等。
388 15
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
507 14
|
11月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
690 0
|
11月前
|
JSON Java API
【干货满满】分享拼多多API接口到手价,用Java语言实现
本方案基于 Java 实现调用拼多多开放平台商品详情 API,通过联盟接口获取商品到手价(含拼团折扣与优惠券),包含签名生成、HTTP 请求及响应解析逻辑,适用于电商比价、导购系统集成。
|
11月前
|
JSON Java API
【干货满满】分享淘宝API接口到手价,用Java语言实现
本文介绍了如何使用 Java 调用淘宝开放平台 API 获取商品到手价,涵盖依赖配置、签名生成、HTTP 请求与响应解析等核心实现步骤。
|
JavaScript Java Go
Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡
Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡
874 0
|
JSON JavaScript 前端开发
Python+JAVA+PHP语言,苏宁商品详情API
调用苏宁商品详情API,可通过HTTP/HTTPS发送请求并解析响应数据,支持多种编程语言,如JavaScript、Java、PHP、C#、Ruby等。核心步骤包括构造请求URL、发送GET/POST请求及解析JSON/XML响应。不同语言示例展示了如何获取商品名称与价格等信息,实际使用时请参考苏宁开放平台最新文档以确保兼容性。

热门文章

最新文章