力扣刷题记录——804. 唯一摩尔斯密码词、806. 写字符串需要的行数、824. 山羊拉丁文

news2024/12/23 14:07:58

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《力扣刷题记录——804. 唯一摩尔斯密码词、806. 写字符串需要的行数、824. 山羊拉丁文》。 

目录

804. 唯一摩尔斯密码词

        题目描述

        解题思路

        解题代码

806. 写字符串需要的行数

        题目描述

        解题思路

        解题代码

824. 山羊拉丁文

        题目描述

        解题思路

        解题代码


804. 唯一摩尔斯密码词

题目描述

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

  • 'a' 对应 ".-" ,
  • 'b' 对应 "-..." ,
  • 'c' 对应 "-.-." ,以此类推。

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

[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]

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

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

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

示例 1:

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

共有 2 种不同翻译, "--...-." 和 "--...--.".

示例 2:

输入:words = ["a"]
输出:1

解题思路

首先根据字典的映射关系,将小写字母转化为摩斯密码,得到目标字典。遍历所给列表中的每个单词的每个字母,在字典中查找,将返回结果每个单词拼在一起,用一个列表容纳,最终用set返回这个列表中不重复的元素个数。

解题代码

def uniqueMorseRepresentations(words: list[str]):
    list_1 = [".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.",
     "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."]
    list_2 = ["abcdefghijklmnopqrstuvwxyz"]
    str_dic = {}
    for i in range(len(list_1)):
        str_dic[list_2[0][i]] = list_1[i]
    result = []
    for word in words:
        temp_str = ""
        for j in word:
            temp_str += str_dic[j]
        result.append(temp_str)

    return len(set(result))

806. 写字符串需要的行数

题目描述

我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行。我们给定了一个数组 widths ,这个数组 widths[0] 代表 'a' 需要的单位, widths[1] 代表 'b' 需要的单位,..., widths[25] 代表 'z' 需要的单位。

现在回答两个问题:至少多少行能放下S,以及最后一行使用的宽度是多少个单位?将你的答案作为长度为2的整数列表返回。

示例 1:
输入: 
widths = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
S = "abcdefghijklmnopqrstuvwxyz"
输出: [3, 60]
解释: 
所有的字符拥有相同的占用单位10。所以书写所有的26个字母,
我们需要2个整行和占用60个单位的一行。
示例 2:
输入: 
widths = [4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
S = "bbbcccdddaaa"
输出: [2, 4]
解释: 
除去字母'a'所有的字符都是相同的单位10,并且字符串 "bbbcccdddaa" 将会覆盖 9 * 10 + 2 * 4 = 98 个单位.
最后一个字母 'a' 将会被写到第二行,因为第一行只剩下2个单位了。
所以,这个答案是2行,第二行有4个单位宽度。

解题思路

首先根据字典的特性,将字母转化为对应的数字。涉及到列表内部的运算用指针更加方便,当当前和小于等于100,而再加下一个值时大于一百,行数+1,并且,下一个值为下一行的开始值。如果while循化结束count任然等于一,说明没有出现换行的情况,直接return,否则继续判断。如果最后一行正好到字符串最后一个结束,那么返回所有和和行数,否则需要对最后一行进行求和。

解题代码

def numberOfLines(widths: list[int], s: str) -> list[int]:
    str_1 = "abcdefghijklmnopqrstuvwxyz"
    str_dic = {}
    for i in range(len(widths)):
        str_dic[str_1[i]] = widths[i]
    # 定义指针
    l_p = 0
    count = 0
    temp_all = 0
    target_list = []
    while l_p<=len(s)-2:
        temp_all += str_dic[s[l_p]]
        if (temp_all<=100) and (temp_all + str_dic[s[l_p + 1]] >100):
            # 行数+1
            count += 1
            target_list.append(l_p+1)
            # l_p += count+1
            temp_all = 0
            # l_p += 1
        l_p += 1
    if count == 0:
        return [1,temp_all+str_dic[s[l_p]]]
    if len(s) == target_list[-1]:
        pass
    else:
        count += 1

    if target_list == []:
        return [count,temp_all]
    rest_list = s[target_list[-1]::]
    fin_result = 0
    for i in rest_list:
        fin_result += str_dic[i]
    return [count,fin_result]

824. 山羊拉丁文

题目描述

给你一个由若干单词组成的句子 sentence ,单词间由空格分隔。每个单词仅由大写和小写英文字母组成。

请你将句子转换为 山羊拉丁文(Goat Latin(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。山羊拉丁文的规则如下:

  • 如果单词以元音开头('a''e''i''o''u'),在单词后添加"ma"
    • 例如,单词 "apple" 变为 "applema" 。
  • 如果单词以辅音字母开头(即,非元音字母),移除第一个字符并将它放到末尾,之后再添加"ma"
    • 例如,单词 "goat" 变为 "oatgma" 。
  • 根据单词在句子中的索引,在单词最后添加与索引相同数量的字母'a',索引从 1 开始。
    • 例如,在第一个单词后添加 "a" ,在第二个单词后添加 "aa" ,以此类推。

返回将 sentence 转换为山羊拉丁文后的句子。

示例 1:

输入:sentence = "I speak Goat Latin"
输出:"Imaa peaksmaaa oatGmaaaa atinLmaaaaa"

示例 2:

输入:sentence = "The quick brown fox jumped over the lazy dog"
输出:"heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa"

解题思路

首先定义元音列表,判断单词的首字母是不是元音字母,if-else分支判断,在判断之前需要split一下,最后一不要忘记添加空格就可以了。中间具体怎么添加,添加什么,根据题目要求来就可以了。

解题代码

def toGoatLatin(sentence: str) -> str:
    list_1 = ['a', 'e', 'i', 'o', 'u',"A","E","I","O","U"]
    result = ""
    count = 0
    for i in sentence.split(" "):
        if i == " ":
            result += " "
        else:
            count += 1
        if i[0] in list_1:
            i += "ma"
        else:
            if len(i) == 1:
                i += "ma"
            else:
                temp = i[0]
                # print(i[1::])
                i = i[1::]
                i += temp
                i += "ma"
        i += "a"*count
        i += " "
        result += i
    return result[:-1:]

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/183378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache两个解析漏洞复现及防御方法

一、多后缀解析漏洞 形成原因&#xff1a; 配置apache时&#xff0c;对于apache配置不熟练&#xff0c;配置命令不清楚&#xff0c;在配置PHP文件处理程序时&#xff0c;配置命令存在问题&#xff1a;位于漏洞环境目录的 conf/docker-php.conf里的配置命令&#xff08;AddHand…

路由策略实验(华为)

题目&#xff1a; 思路&#xff1a; 为完成实验达成目的&#xff0c;需要明确两个区域内的协议&#xff0c;并且要避免造成环路&#xff0c;故需要改变r3-r1,r3-r4两边的优先级&#xff0c;可以避免造成环路&#xff0c;并且需要达到选路最优&#xff0c;设置匹配规则&#xff…

【机器学习】逻辑回归(实战)

逻辑回归&#xff08;实战&#xff09; 目录一、准备工作&#xff08;设置 jupyter notebook 中的字体大小样式等&#xff09;二、绘制 sigmoid 函数&#xff1a;σ(z)11e−z\sigma(z)\frac{1}{1e^{-z}}σ(z)1e−z1​三、查看鸢尾花数据集1、加载 iris 数据集并查看2、设计二分…

[Java]Maven学习笔记(尚硅谷2022)

文章目录&#x1f97d; Maven概述&#x1f30a; Maven的功能&#x1f30a; Maven简介&#x1f4a6; 构建&#x1f4a6; 依赖&#x1f4a6; Maven 的工作机制&#x1f97d; Maven核心程序解压和配置&#x1f30a; Maven 核心程序解压与配置&#x1f4a6; 下载&#x1f4a6; 解压…

电脑本地安装不同版本MySQL

本地已经安装了mysql5.7版本&#xff0c;想测试mysql8版本的用法&#xff0c;想在一台电脑同时配置不同版本的mysql在不同端口号&#xff0c;看起来简单&#xff0c;实现起来其实挺多坑的&#xff0c;总结下实战经验和大家分享下 一、下载安装 下载地址 二、配置 1、解压缩…

word标签功能:如何快速制作批量产品贴纸标签

在日常生活中&#xff0c;在商店购物时&#xff0c;经常可以看到&#xff0c;商品架上放有产品贴纸标签&#xff0c;用于消费者识别产品价格、日期或者组合成分等。在日常办公中&#xff0c;在办公用品或仓库物料上&#xff0c;同样也能看到贴纸标签&#xff0c;用于物品的分类…

Go语言安装

1. 介绍 Go语言是一门编译型语言。Go的语法接近C语言&#xff0c;但对于变量的声明有所不同。Go支持垃圾回收功能。 C/C&#xff1a;C/C语言直接编译成机器码&#xff0c;不需要执行环境&#xff0c;直接执行在操作系统上&#xff1b; Java&#xff1a;Java会先编译成字节码.c…

es6对象中的简写形式

对象属性简写 let name ww; let age 18; // es5写法 let es5 {name: name,age: age, }; // es6写法 let es6 {name,age }函数简写 let obj {es5: function () {}, // es5写法es6() {} // es6写法&#xff0c;省略 :function }计算属性名 let name ww; let age 18 let o…

前后端鉴权的10种方案

文章目录0、基本概念认证授权鉴权权限控制认证、授权、鉴权和权限控制的关系1. HTTP 基本鉴权1.1 认证流程图1.2 认证步骤解析1.2 认证步骤解析1.3 优点1.4 缺点1.5 使用场景2. Session-Cookie 鉴权2.1 什么是 Cookie2.2 什么是 Session2.3 Session-Cookie 的认证流程图2.4 Ses…

一起Talk Android吧(第四百七十八回:旋转类视图动画)

文章目录使用方法属性介绍示例代码各位看官们大家好&#xff0c;上一回中咱们说的例子是"平移类视图动画",这一回中咱们说的例子是"旋转类视图动画"。闲话休提&#xff0c;言归正转&#xff0c;让我们一起Talk Android吧&#xff01; 使用方法 旋转类动画…

【Java项目】从0到1构建一个博客系统

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f6f0;️&#x1f6f0;️系列专栏:【JavaWeb】 ✈️✈️本篇内容:从0到1构建一个博客系统&#xff01; &#x1f680;&#x1f680;代码托管平台github&#xff1a;博客系统源码托管&#xff01; ⛵…

【Git】自建代码托管平台-GitLab

10.1、GitLab 简介 GitLab 是由 GitLabInc.开发&#xff0c;使用 MIT 许可证的基于网络的 Git 仓库管理工具&#xff0c;且具有wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具&#xff0c;并在此基础上搭建起来的 web 服务。 GitLab 由乌克兰程序员 DmitriyZaporozhets …

数据分析-深度学习Pytorch Day11

首先要搞懂损失函数与代价函数。损失函数是单个样本与真实值之间的差距代价函数是整个样本集与真实值的平均差距随机梯度下降就是不使用代价函数对参数进行更新&#xff0c;而是使用损失函数对参数更新。梯度下降法( gradient descent )是一阶最优化算法&#xff0c;通常也称为…

SpringBoot+VUE前后端分离项目学习笔记 - 【27 SpringBoot集成Redis】

以首页的文件访问作为示例使用Redis 一方面加快用户访问速度 一方面缓解频繁访问数据库的压力 之前每次访问首页都会请求数据库数据 Redis安装以及配置 所需文件 解压后&#xff0c;双击下述脚本&#xff0c;启动redis 可视化软件安装、设置安装路径然后一直点下一步就OK …

Java OpenJDK 8u362 Windows x64 Installer

文章目录&#xff08;一&#xff09;Azul&#xff08;二&#xff09;Adopt&#xff08;三&#xff09;IBM&#xff08;四&#xff09;Oracle&#xff08;一&#xff09;Azul WEB Page&#xff1a;&#x1f517;Download Azul Zulu Builds of OpenJDK Windows installer&#xf…

一位老测试对测试用例之个人见解

刚入行的时候&#xff0c;看了很多关于测试相关的文章&#xff0c;记得有一篇说到测试用例是测试灵魂让我印象深刻。如今&#xff0c;我入行几年了&#xff0c;越发深感测试用例的设计重要性&#xff0c;可以这么说&#xff0c;测试用例的设计与管理是测试工程师的核心技能。我…

一套计算机网络系统设计方案,包含外网、内网、智能化设备网

一套计算机网络系统设计方案&#xff0c;包含外网、内网、智能化设备网。 弱电工程设计的计算机网络系统一般分为三种&#xff1a;内网、外网、设备网&#xff0c;这三种网络系统如何设计&#xff1f;它们的架构是如何的呢&#xff1f; 计算机网络系统就是利用通信设备和线路将…

面试_Http常见问题

http协议的默认端口 80 应用层有哪些协议 http ,FTP,SMTP,DNS,MQ 在浏览器中输入网址后会发生什么&#xff1a; 首先服务器有自己的ip地址&#xff0c;但ip地址对人来说很难记&#xff0c;所以人会在浏览器里输入域名&#xff0c;然后经过DNS解析为ip,访问对应的服务器 与服务…

内网云盘如何内网穿透实现公网访问

云盘是一种专业的互联网存储工具&#xff0c;是互联网的云技术产物&#xff0c;它通过互联网为企业和个人提供信息的存储、读取、下载等服务&#xff0c;具有安全稳定、海量存储的特点。随着企业信息化发展&#xff0c;云盘系统需求不断扩大&#xff0c;相关系统软件被广泛应用…

自己动手写一个操作系统——loader(1)

前言 上篇文章中&#xff0c;我们写了一个简单的 loader 作为被加载的演示对象。我们知道 loader 是用来加载 kernel 的&#xff0c;今天我们就编写 loader 代码完成这件事情。 实模式下的内存地址 我们计划把 kernel 加载到内存的 0x10000 地址处。 不过面临一个挑战&…