当前位置: 面试刷题>> 抽搐词 (经典算法题500道)
题目描述(补充后):
**题目:抽搐词(Twitch Words)检测算法**
在社交媒体和网络文本中,有时会出现一些由于连续重复字符或特定模式导致的“抽搐”现象,我们称之为抽搐词。例如,“heeeeeeey” 或 “looool”。这些词由于连续重复某个字母或音节,给人一种强调或模仿某种情绪(如兴奋、惊讶)的感觉。
编写一个算法,用于检测给定文本中是否存在抽搐词,并返回这些抽搐词的列表。抽搐词定义为:至少包含三个连续相同字符的单词(注意,单词间以空格分隔)。
**示例输入**:
```
"Hey guys, check this out! It's sooo coool and heeeey, what's up?"
```
**示例输出**:
```
["sooo", "coool", "heeeey"]
```
**注意**:算法应忽略标点符号和大小写,但输出时保持原文本中的大小写格式。
### PHP 示例代码
```php
function detectTwitchWords($text) {
$text = preg_replace('/[^\p{L}\p{N}\s]/u', '', $text); // 移除非字母数字字符,保留空格
$words = explode(' ', strtolower($text)); // 分割成单词并转为小写
$twitchWords = [];
foreach ($words as $word) {
$length = strlen($word);
for ($i = 0; $i < $length - 2; $i++) {
if ($word[$i] === $word[$i+1] && $word[$i+1] === $word[$i+2]) {
// 检查原文本中对应位置的大小写
$originalWord = substr($text, strpos($text, $word), strlen($word));
$twitchWords[] = $originalWord;
break; // 假设每个单词只包含一个抽搐模式
}
}
}
return array_unique($twitchWords); // 去除重复项
}
$input = "Hey guys, check this out! It's sooo coool and heeeey, what's up?";
$result = detectTwitchWords($input);
print_r($result);
```
**注意**:PHP 示例中使用了正则表达式和字符串操作来移除标点符号并检测抽搐词,但保留了原始文本中的大小写格式。
### Python 示例代码
```python
import re
def detect_twitch_words(text):
text = re.sub(r'[^\w\s]', '', text) # 移除非字母数字字符,保留空格
words = text.lower().split() # 分割成单词并转为小写
twitch_words = []
for word in words:
if any(char * 3 in word for char in set(word)):
# 保留原文本中单词的大小写
start_index = text.lower().find(word)
original_word = text[start_index:start_index + len(word)]
twitch_words.append(original_word)
return list(set(twitch_words)) # 去除重复项
input_text = "Hey guys, check this out! It's sooo coool and heeeey, what's up?"
result = detect_twitch_words(input_text)
print(result)
```
### JavaScript 示例代码
```javascript
function detectTwitchWords(text) {
text = text.replace(/[^\w\s]/gi, ''); // 移除非字母数字字符,保留空格
const words = text.toLowerCase().split(' '); // 分割成单词并转为小写
const twitchWords = [];
for (const word of words) {
const charSet = new Set(word);
for (const char of charSet) {
if (word.includes(char.repeat(3))) {
// 查找原始文本中的位置,保留原大小写
const startIndex = text.toLowerCase().indexOf(word);
const originalWord = text.substring(startIndex, startIndex + word.length);
twitchWords.push(originalWord);
break; // 假设每个单词只包含一个抽搐模式
}
}
}
return [...new Set(twitchWords)]; // 去除重复项
}
const input = "Hey guys, check this out! It's sooo coool and heeeey, what's up?";
const result = detectTwitchWords(input);
console.log(result);
```
以上代码示例均实现了抽搐词的检测功能,但请注意,具体实现细节(如处理标点符号和大小写的方式)可能因需求而异。