Java统计一个字符串中给定字符串出现的频率
时间: 2023-12-27 21:04:36 浏览: 73
可以使用Java中的String类的方法来实现给定字符串的频率统计,以下是一个示例代码:
```java
public static int countOccurrences(String text, String pattern) {
int count = 0;
int index = 0;
while ((index = text.indexOf(pattern, index)) != -1) {
count++;
index += pattern.length();
}
return count;
}
```
其中,text表示需要统计的字符串,pattern表示需要查找的子字符串,返回值为子字符串出现的次数。这个方法使用了indexOf()方法来查找子字符串,每次找到一个子字符串就将计数器加1,然后将查找的起始位置移动到上一个子字符串出现的后面。
相关问题
给定一个字符串,请将字符串里的字符按照出现的频率降序排列。用java实现
可以使用HashMap来统计每个字符出现的次数,然后再使用PriorityQueue来按照出现频率进行排序。
以下是Java代码实现:
```java
import java.util.*;
public class FrequencySort {
public String frequencySort(String s) {
Map<Character, Integer> map = new HashMap<>();
for (char c : s.toCharArray()) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
PriorityQueue<Character> pq = new PriorityQueue<>((a, b) -> map.get(b) - map.get(a));
pq.addAll(map.keySet());
StringBuilder sb = new StringBuilder();
while (!pq.isEmpty()) {
char c = pq.poll();
int freq = map.get(c);
for (int i = 0; i < freq; i++) {
sb.append(c);
}
}
return sb.toString();
}
}
```
其中,map用来统计每个字符出现的次数,pq用来按照出现频率进行排序,sb用来存储排序后的字符串。在pq中,我们定义了一个比较器,使得出现次数多的字符排在前面。最后,依次取出pq中的字符,根据其出现次数将其加入sb中,最终返回sb.toString()即可。
leetcode451_根据字符出现频率排序。用java语言编写
题目描述:
给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
示例 1:
输入:
"tree"
输出:
"eert"
解释:
'e'出现两次,'r'和't'都只出现一次。因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。
示例 2:
输入:
"cccaaa"
输出:
"cccaaa"
解释:
'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。注意"cacaca"是不正确的,因为相同的字母必须放在一起。
示例 3:
输入:
"Aabb"
输出:
"bbAa"
解释:
此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。注意'A'和'a'被认为是两种不同的字符。
Java代码如下:
```
import java.util.*;
public class Solution {
public String frequencySort(String s) {
if (s == null || s.length() == 0) {
return "";
}
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
map.put(c, map.getOrDefault(c, 0) + 1);
}
List<Map.Entry<Character, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, (o1, o2) -> o2.getValue() - o1.getValue());
StringBuilder sb = new StringBuilder();
for (Map.Entry<Character, Integer> entry : list) {
char c = entry.getKey();
int count = entry.getValue();
for (int i = 0; i < count; i++) {
sb.append(c);
}
}
return sb.toString();
}
}
```
解题思路:
首先遍历字符串,使用HashMap记录每个字符出现的次数。然后将HashMap转换为List,并按照出现次数从大到小进行排序。最后遍历排序后的List,将每个字符按照出现次数依次添加到StringBuilder中,并返回StringBuilder的字符串形式。
时间复杂度:O(nlogn),其中n为字符串s的长度。遍历字符串的时间复杂度为O(n),HashMap和List的操作时间复杂度均为O(n),排序时间复杂度为O(nlogn),StringBuilder操作时间复杂度为O(n)。因此总时间复杂度为O(nlogn)。
空间复杂度:O(n),其中n为字符串s的长度。HashMap和List的空间复杂度均为O(n),StringBuilder的空间复杂度也为O(n)。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)