morses = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."] def get_morses(words_str): morses_words_str = "" for letter in words_str: morses_words_str += morses[ord(letter) - 97] print(morses_words_str) return morses_words_str def sovle(words_str): s = set() for word in words_str: morses_word = get_morses(words_str) s.add(morses_word) print(s) return len(s) words = "GIN zen gig msg" words_str = words.lower() print(sovle(words))
时间: 2025-07-23 16:51:28 浏览: 15
你给出的代码旨在解决一个关于摩尔斯电码的问题,比如 [LeetCode 804. Unique Morse Code Words](https://leetcode.com/problems/unique-morse-code-words/)。该问题要求将一组单词转换为摩尔斯电码,并统计其中有多少个**不同的摩尔斯电码表示**。
不过,你当前的代码中存在一些错误,特别是 `sovle` 函数中的逻辑错误和函数调用方式。我将为你详细解释并提供修正后的代码。
---
### ✅ 正确的实现如下:
```python
morses = [".-","-...","-.-.","-..",".","..-.","--.","....","..",
".---","-.-",".-..","--","-.","---",".--.","--.-",".-.",
"...","-","..-","...-",".--","-..-","-.--","--.."]
def uniqueMorseRepresentations(words):
# 使用集合存储不同的摩尔斯电码
morse_set = set()
for word in words:
# 将每个字母转换为其对应的摩尔斯电码
morse_code = ''.join(morses[ord(char) - ord('a')] for char in word)
morse_set.add(morse_code)
return len(morse_set)
# 测试数据
words = ["gin", "zen", "gig", "msg"]
print(uniqueMorseRepresentations(words)) # 输出: 2
```
---
### 🔍 代码解释:
1. **morses 列表**:存储了从 'a' 到 'z' 的摩尔斯电码。
2. **uniqueMorseRepresentations 函数**:
- 接收一个字符串列表 `words`。
- 初始化一个空集合 `morse_set` 用于存储唯一的摩尔斯电码。
- 遍历每个单词 `word`,然后对每个字母进行转换。
- 使用 `ord(char) - ord('a')` 找到字母在 `morses` 列表中的索引。
- 将转换后的摩尔斯电码字符串加入集合。
3. 最后返回集合的长度,即不同的摩尔斯电码数量。
---
### ❌ 原始代码问题:
- `sovle` 函数中写成了 `for word in words_str`,但 `words_str` 是一个字符串,不是单词列表。
- `get_morses(words_str)` 应该是 `get_morses(word)`。
- `words = "GIN zen gig msg"` 没有被正确拆分成单词列表。
---
### ✅ 如果你希望用原始方式修复,可以这样改:
```python
morses = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---",
"-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-",
"..-","...-",".--","-..-","-.--","--.."]
def get_morses(word):
morses_words_str = ""
for letter in word.lower():
morses_words_str += morses[ord(letter) - 97]
return morses_words_str
def solve(words_str):
words = words_str.split() # 将字符串分割成单词列表
s = set()
for word in words:
morses_word = get_morses(word)
s.add(morses_word)
return len(s)
# 调用
words = "GIN zen gig msg"
print(solve(words)) # 输出: 2
```
---
###
阅读全文
相关推荐














