【Leetcode -796.旋转字符串 -804.唯一摩尔斯密码词】

简介: 【Leetcode -796.旋转字符串 -804.唯一摩尔斯密码词】

Leetcode -796.旋转字符串

题目:给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true。

s 的 旋转操作 就是将 s 最左边的字符移动到最右边。

例如, 若 s = ‘abcde’,在旋转一次之后结果就是’bcdea’ 。

示例 1:

输入: s = “abcde”, goal = “cdeab”

输出 : true

示例 2 :

输入 : s = “abcde”, goal = “abced”

输出 : false

提示 :

1 <= s.length, goal.length <= 100

s 和 goal 由小写英文字母组成

思路:思路是每次旋转一次,将第一个字符存到 temp 中,将后面的字符挪动到钱一个位置,然后将 temp 放到最后一个位置,就完成一次旋转,每完成一次旋转就判断是否与 goal 数组相同,相同则返回 true ;否则继续旋转,到最后都不相同就返回 false;

bool rotateString(char* s, char* goal)
    {
        //两个字符串如果相同,返回true
        if (!strcmp(s, goal))
            return true;
        //先遍历s字符串,i是旋转的次数
        for (int i = 0; i < strlen(s) - 1; i++)
        {
            //j挪动字符,temp 每次存放字符串的第一个字符,然后将后面的字符往前挪
            int j = 0;
            char temp = s[0];
            //挪动字符
            while (j < strlen(s))
            {
                char tmp = s[j];
                s[j] = s[j + 1];
                j++;
            }
            //将temp放到最后一个字符的位置
            s[j - 1] = temp;
            //判断旋转 i 次后和 goal 字符串是否相同,相同则返回true
            if (!strcmp(s, goal))
                return true;
        }
        //没有返回true则返回false
        return false;
    }

Leetcode -804.唯一摩尔斯密码词

题目:国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如 :

‘a’ 对应 “.-” ,

‘b’ 对应 “-…” ,

‘c’ 对应 “-.-.” ,以此类推。

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

[“.-”, “-…”, “-.-.”, “-…”, “.”, “…-.”, “–.”, “…”, “…”, “.—”, “-.-”, “.-…”, “–”, “-.”, “—”, “.–.”, “–.-”, “.-.”, “…”, “-”, “…-”, “…-”, “.–”, “-…-”, “-.–”, “–…”]

给你一个字符串数组 words ,每个单词可以写成每个字母对应摩尔斯密码的组合。

例如,“cab” 可以写成 “-.-…–…” ,(即 “-.-.” + “.-” + “-…” 字符串的结合)。我们将这样一个连接过程称作 单词翻译 。

对 words 中所有单词进行单词翻译,返回不同 单词翻译 的数量。

示例 1:

输入 : words = [“gin”, “zen”, “gig”, “msg”]

输出 : 2

解释 :

各单词翻译如下 :

“gin” -> “–…-.”

“zen” -> “–…-.”

“gig” -> “–…–.”

“msg” -> “–…–.”

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

示例 2:

输入:words = [“a”]

输出:1

提示:

1 <= words.length <= 100

1 <= words[i].length <= 12

words[i] 由小写英文字母组成

思路:先将26种摩尔斯密码对应26个字母存放到一个二维数组 temp 中;再用 morse 数组存放不同单词的翻译;count统计不同单词翻译的数量;每遍历一个字符串,就将它对应的摩尔斯密码放入 tmp 数组中,将它与 morse 数组中已存在的摩尔斯密码比较,判断是否存在,不存在则将它放入 morse 数组中,并统计 count ;存在则继续判断下一个字符串;

int uniqueMorseRepresentations(char** words, int wordsSize)
    {
        //一共26种摩尔斯密码,每种摩尔斯密码最多5个字符
        char temp[26][5] = { ".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.." };
        //morse 数组存放不同单词的翻译;count统计不同单词翻译的数量
        char morse[100][60] = { 0 };
        int count = 0;
        for (int i = 0; i < wordsSize; i++)
        {
            int flag = 0;
            //tmp 数组存放每个字符串的摩尔斯密码;因为每个字符串的长度最长为 12 ,即最多有12个字母,转化成摩尔斯密码的长度就是60
            char tmp[60] = { 0 };
            //将摩尔斯密码对应的字符串追加到tmp数组中
            for (int j = 0; j < strlen(words[i]); j++)
            {
                strcat(tmp, temp[words[i][j] - 'a']);
            }
            //比较morse数组和tmp数组,判断 tmp 是否已经在morse数组中 ,
            //已经出现过则将 flag 置1,跳出循环
            //否则将它放入 morse 数组中,并统计不同单词翻译的数量count
            for (int k = 0; k < count; k++)
            {
                if (!strcmp(morse[k], tmp))
                {
                    flag = 1;
                    break;
                }
            }
            if (!flag)
            {
                strcpy(morse[count], tmp);
                count++;
            }
        }
        return count;
    }
目录
相关文章
|
3月前
【bug记录】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘
【bug记录】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘
|
25天前
|
JavaScript
力扣3333.找到初始输入字符串Ⅱ
【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
31 1
|
1月前
|
C++
Leetcode第43题(字符串相乘)
本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
24 9
|
1月前
|
机器学习/深度学习
Leetcode第48题(旋转图像)
这篇文章介绍了LeetCode第48题“旋转图像”的解题方法,通过原地修改二维矩阵实现图像的顺时针旋转90度。
27 0
Leetcode第48题(旋转图像)
|
1月前
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
17 0
|
1月前
【LeetCode 22】459.重复的子字符串
【LeetCode 22】459.重复的子字符串
28 0
|
1月前
【LeetCode 20】151.反转字符串里的单词
【LeetCode 20】151.反转字符串里的单词
19 0
|
1月前
【LeetCode 19】541.反转字符串II
【LeetCode 19】541.反转字符串II
20 0
|
1月前
【LeetCode 18】6.2.反转字符串
【LeetCode 18】6.2.反转字符串
14 0
|
3月前
|
存储 算法
LeetCode第48题旋转图像
LeetCode第48题"旋转图像"的解题方法,通过两次翻转操作——先水平翻转再对角线翻转,实现了原地旋转矩阵的效果。
LeetCode第48题旋转图像