前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Leetcode -796.旋转字符串 -804.唯一摩尔斯密码词】

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

作者头像
YoungMLet
发布2024-03-01 10:02:56
910
发布2024-03-01 10:02:56
举报
文章被收录于专栏:C++/Linux

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;

代码语言:javascript
复制
		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 ;存在则继续判断下一个字符串;

代码语言:javascript
复制
		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;
		}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Leetcode -796.旋转字符串
  • Leetcode -804.唯一摩尔斯密码词
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档