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

相关文章
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
69 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
3月前
|
Java Maven
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
该博客文章介绍了如何使用Java Swing中的JFrame创建一个窗体来收集用户输入的内容,并提供了详细的实现步骤和完整代码示例。
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
|
12天前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
25 4
|
1月前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
43 3
|
1月前
|
移动开发 Java 大数据
深入探索Java语言的核心优势与现代应用实践
【10月更文挑战第10天】深入探索Java语言的核心优势与现代应用实践
51 4
|
1月前
|
存储 Java 数据安全/隐私保护
Java中的域,什么是域?计算机语言中的域是什么?(有代码实例)
文章解释了Java中域的概念,包括实例域、静态域、常量域和局部域,以及它们的特点和使用场景。
58 2
|
1月前
|
Java 数据安全/隐私保护 C++
Java语言关键字
Java语言关键字
23 2
|
1月前
|
分布式计算 安全 Java
Java语言的特点?
Java语言的特点?
|
1月前
|
算法 Java
LeetCode(一)Java
LeetCode(一)Java
|
3月前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
70 2