当前位置: 面试刷题>> 词频统计 (经典算法题500道)
### 题目描述补充
**题目:词频统计**
给定一个字符串(可能包含标点符号、空格等),请编写一个程序来统计并输出该字符串中每个单词(忽略大小写,标点符号视为单词的分隔符)出现的频率,并按照频率从高到低排序(如果频率相同,则按字典序升序排序)。
**示例输入**:
```
"Hello, world! Welcome to the world of coding. Enjoy coding, everyone!"
```
**期望输出**:
```
the: 2
world: 2
coding: 2
Hello: 1
Welcome: 1
of: 1
to: 1
Enjoy: 1
everyone: 1
```
### PHP 示例代码
```php
$count) {
echo "$word: $count\n";
}
}
// 示例输入
$input = "Hello, world! Welcome to the world of coding. Enjoy coding, everyone!";
wordFrequency($input);
// 码小课网站中有更多相关内容分享给大家学习
?>
```
### Python 示例代码
```python
def word_frequency(s):
# 使用正则表达式替换标点符号并转为小写
import re
words = re.sub(r'[^\w\s]', ' ', s.lower()).split()
# 使用字典统计词频
frequency = {}
for word in words:
if word:
if word not in frequency:
frequency[word] = 0
frequency[word] += 1
# 按频率降序,频率相同则按字典序升序排序
sorted_words = sorted(frequency.items(), key=lambda x: (-x[1], x[0]))
# 输出结果
for word, count in sorted_words:
print(f"{word}: {count}")
# 示例输入
input_str = "Hello, world! Welcome to the world of coding. Enjoy coding, everyone!"
word_frequency(input_str)
# 码小课网站中有更多相关内容分享给大家学习
```
### JavaScript 示例代码
```javascript
function wordFrequency(str) {
// 使用正则表达式替换标点符号并转为小写
const words = str.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/).filter(Boolean);
// 使用Map统计词频
const frequency = new Map();
for (const word of words) {
frequency.set(word, (frequency.get(word) || 0) + 1);
}
// 将Map转换为数组,并按频率降序,频率相同则按字典序升序排序
const sortedWords = Array.from(frequency.entries()).sort((a, b) => {
if (a[1] === b[1]) {
return a[0].localeCompare(b[0]);
}
return b[1] - a[1];
});
// 输出结果
sortedWords.forEach(([word, count]) => {
console.log(`${word}: ${count}`);
});
}
// 示例输入
const input = "Hello, world! Welcome to the world of coding. Enjoy coding, everyone!";
wordFrequency(input);
// 码小课网站中有更多相关内容分享给大家学习
```
这些示例代码分别用 PHP、Python 和 JavaScript 实现了词频统计的功能,并按照题目要求进行了排序和输出。