字符串 leetcode 804 唯一摩尔斯密码词

题目 :唯一摩尔斯密码词

内容:

国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: “a” 对应 “.-”, “b” 对应 “-…”, “c” 对应 “-.-.”, 等等。

为了方便,所有26个英文字母对应摩尔斯密码表如下:

[".-","-…","-.-.","-…",".","…-.","–.","…","…",".—","-.-",".-…","–","-.","—",".–.","–.-",".-.","…","-","…-","…-",".–","-…-","-.–","–…"]

给定一个单词列表,每个单词可以写成每个字母对应摩尔斯密码的组合。例如,“cab” 可以写成 “-.-…–…”,(即 “-.-.” + “.-” + “-…” 字符串的结合)。我们将这样一个连接过程称作单词翻译。

返回我们可以获得所有词不同单词翻译的数量。

例如:
输入: words = [“gin”, “zen”, “gig”, “msg”]
输出: 2
解释:
各单词翻译如下:
“gin” -> “–…-.”
“zen” -> “–…-.”
“gig” -> “–…--.”
“msg” -> “–…--.”

共有 2 种不同翻译, “–…-.” 和 “–…--.”.

注意:

单词列表words 的长度不会超过 100。
每个单词 words[i]的长度范围为 [1, 12]。
每个单词 words[i]只包含小写字母。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-morse-code-words

解答

int uniqueMorseRepresentations(char ** words, int wordsSize){
    
    
    int b,c;
    // 把字母对应情况用二元组来表示
    char a[26][5]={
    
    ".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
    // hashmap用来存储不重复的单词所对应的摩尔斯密码
    char hashmap[100][60]={
    
    0};//不初始化,会导致程序bug,改了好久才发现这里出问题,好习惯一定要养成
    int count=0;
    //二维字符用来存储每个单词对应的摩尔斯密码 12x4=48
    char z[100][48] = {
    
    0};
    for(int i=0;i<wordsSize;i++){
    
    
        for(int j=0;j<strlen(words[i]);j++){
    
    
            //b用来表示这个单词中某个字母和a间的差,是a的话,差是0,b的话差是1,用b的值来对应每个单词摩尔斯码
            b=words[i][j]-'a';
            //把每个摩尔斯码拼接到对应的第i个单词那个
            strcat(z[i],a[b]);
        }
        //循环遍历hashmap中的字符串去比较,有相等则break,跳出的时候c一定不可能大于count,没有相同的时候c>count;
        for(c=0;c<=count;c++){
    
    
            if(strcmp(hashmap[c],z[i])==0){
    
    
                break;
            }

        }
        //不同字符串的时候往hashmap中添加
        if(c>count){
    
    
            strcat(hashmap[c],z[i]);
            count++;
        }
    }
    return count;
}

注意:

每次声明变量的时候记得初始化,这是个好习惯.还有用字符串的strcmp strcat strcpy时候打正确,切记不要看错.

总结:

构建hashmap来实现检验重复.发现python 的集合 字典都有防止重复的作用,这些都是封装好的,c语言则需要通过代码去实现防止重复.所以我认为c语言对练习算法非常的好,可以去自己实现一些底层的东西.

猜你喜欢

转载自blog.csdn.net/mogbox/article/details/112908439