字符统计及重排java
时间: 2023-10-26 07:02:49 浏览: 83
字符统计及重排是一个常见的编程问题,可以用Java来实现。下面是一个简单的例子:
```java
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
public class CharacterCountAndReorder {
public static void main(String[] args) {
String str = "Hello World!";
Map<Character, Integer> charCount = countCharacters(str);
System.out.println("字符统计:");
for (Map.Entry<Character, Integer> entry : charCount.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
String reorderedStr = reorderCharacters(charCount);
System.out.println("字符重排结果:" + reorderedStr);
}
// 统计字符串中每个字符的出现次数
public static Map<Character, Integer> countCharacters(String str) {
Map<Character, Integer> charCount = new HashMap<>();
for (char c : str.toCharArray()) {
charCount.put(c, charCount.getOrDefault(c, 0) + 1);
}
return charCount;
}
// 根据字符出现次数重新排列字符串
public static String reorderCharacters(Map<Character, Integer> charCount) {
PriorityQueue<Character> maxHeap = new PriorityQueue<>((a, b) -> charCount.get(b) - charCount.get(a));
maxHeap.addAll(charCount.keySet());
StringBuilder reorderedStr = new StringBuilder();
while (!maxHeap.isEmpty()) {
char c = maxHeap.poll();
int count = charCount.get(c);
for (int i = 0; i < count; i++) {
reorderedStr.append(c);
}
}
return reorderedStr.toString();
}
}
```
运行以上代码,输出结果为:
```
字符统计:
H: 1
e: 1
l: 3
o: 2
: 1
W: 1
r: 1
d: 1
!: 1
字符重排结果:oooolrldHW! e