题目 :唯一摩尔斯密码词
内容:
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: “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语言对练习算法非常的好,可以去自己实现一些底层的东西.