leetcode - 804 - 唯一摩尔斯密码词

class Solution:   
    def uniqueMorseRepresentations(self, words):
        """
        :type words: List[str]
        :rtype: int
        """
        dic = {"a":".-", "b":"-...", "c":"-.-.", "d":"-..", "e":".", "f":"..-.", "g":"--.", "h":"....", "i":"..", "j":".---", "k":"-.-", \
                    "l":".-..", "m":"--", "n":"-.", "o":"---", "p":".--.", "q":"--.-", "r":".-.", "s":"...", "t":"-", "u":"..-", \
                     "v":"...-", "w":".--", "x":"-..-", "y":"-.--", "z":"--.."}
        morse=''
        morse_list = []
        mor_list = []
        diff_morse=0
        for word in words:
            word = word.lower()
            for i in word:
                morse += dic[i]
            morse_list.append(morse)
            morse = ''
     
        for mor in morse_list:
            if mor not in mor_list:
                mor_list.append(mor)
                diff_morse += 1
        return diff_morse
    

基于MATLAB的Morse Code译码算法主要包括以下几个步骤: 1. 读取音频文件并进行滤波处理,以去除噪声和干扰信号。 ```matlab [y, Fs] = audioread('audio_file.wav'); % 读取音频文件 [b, a] = butter(6, [f1 f2]/(Fs/2)); % 设计Butterworth滤波器 y_filtered = filter(b, a, y); % 滤波处理 ``` 2. 对滤波后的信号进行二值化处理,将其转换为0和1的数字信号。 ```matlab y_binary = y_filtered > threshold; % 二值化处理 ``` 3. 对二值化后的信号进行差分处理,以便于后续的译码。 ```matlab y_diff = diff(y_binary); % 差分处理 ``` 4. 去除差分后信号中的零元素,以便于后续的译码。 ```matlab y_diff_no_zero = y_diff(y_diff ~= 0); % 去除零元素 ``` 5. 根据Morse Code编码表进行译码,将差分后的信号转换为对应的字母或数字。 ```matlab morse_code = {'01', '1000', '1010', '100', '0', '0010', '110', '0000', '00', '0111', '101', '0100', '11', '10', '111', '0110', '1101', '010', '000', '1', '001', '0001', '011', '1001', '1011', '1100'}; alphabet = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; num = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'}; morse_code_table = [alphabet, num, {' '}, {''}]; morse_code_dict = containers.Map(morse_code, morse_code_table); result = ''; for i = 1:length(y_diff_no_zero) if y_diff_no_zero(i) == 1 dot_or_dash = '1'; else dot_or_dash = '0'; end if i == length(y_diff_no_zero) || y_diff_no_zero(i+1) == -1 result = [result, morse_code_dict(dot_or_dash)]; else continue; end end ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值