【数据结构与算法】之字符串系列-20240126

news2024/11/16 23:45:50

在这里插入图片描述


这里写目录标题

  • 一、12. 整数转罗马数字
  • 二、43. 字符串相乘
  • 三、49. 字母异位词分组
  • 四、151. 反转字符串中的单词
  • 五、179. 最大数

一、12. 整数转罗马数字

中等
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给你一个整数,将其转为罗马数字。

示例 1:
输入: num = 3
输出: “III”

示例 2:
输入: num = 4
输出: “IV”

示例 3:
输入: num = 9
输出: “IX”

示例 4:
输入: num = 58
输出: “LVIII”
解释: L = 50, V = 5, III = 3.

示例 5:
输入: num = 1994
输出: “MCMXCIV”
解释: M = 1000, CM = 900, XC = 90, IV = 4.

class S12:
    def func(self, num):
        dic = [
            (1000, 'M'),
            (900, 'CM'),
            (500, 'D'),
            (400, 'CD'),
            (100, 'C'),
            (90, 'XC'),
            (50, 'L'),
            (40, 'XL'),
            (10, 'X'),
            (5, 'V'),
            (4, 'IV'),
            (1, 'I')
        ]
        res = []

        while True:
            for i, j in dic:
                if num >= i:
                    res.append(j)
                    num -= i
            if num == 0:
                break
        return ''.join(res)


r = S12()
num = 1994
print(r.func(num))

二、43. 字符串相乘

中等
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

示例 1:
输入: num1 = “2”, num2 = “3”
输出: “6”

示例 2:
输入: num1 = “123”, num2 = “456”
输出: “56088”

思路:
123 * 456
= 3*6+3*50+3*400
+ 20*6+20*50+20*400
+ 100*6+100*50+100*400

class Solution:
    def func(self, num1, num2):
        ans = 0
        f1 = 1
        for i in range(len(num1) - 1, -1, -1):
            n1 = int(num1[i]) * f1
            f2 = 1
            for j in range(len(num2) - 1, -1, -1):
                n2 = int(num2[j]) * f2
                ans += n1 * n2
                f2 *= 10
            f1 *= 10
        return str(ans)

三、49. 字母异位词分组

中等
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]

示例 2:
输入: strs = [“”]
输出: [[“”]]

示例 3:
输入: strs = [“a”]
输出: [[“a”]]

def func(strs):
    d=defaultdict(list)
    for item in strs:
        key=''.join(sorted(item))
        d[key].append(item)
    return list(d.values())
strs=["eat", "tea", "tan", "ate", "nat", "bat"]
print(func(strs))

四、151. 反转字符串中的单词

中等
给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

示例 1:
输入:s = “the sky is blue”
输出:“blue is sky the”

示例 2:
输入:s = " hello world "
输出:“world hello”
解释:反转后的字符串中不能存在前导空格和尾随空格。

示例 3:
输入:s = “a good example”
输出:“example good a”
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。

class S151:
    def func(self, s):
        return ' '.join(s.split()[::-1])

r = S151()
s = "a good   example"
print(r.func(s))

五、179. 最大数

中等
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

示例 1:
输入:nums = [10,2]
输出:“210”

示例 2:
输入:nums = [3,30,34,5,9]
输出:“9534330”

def fn(nums):
    #todo 1先根据首位排序
    s = list(map(str, nums))    #利用map映射函数
    print(s)            #['3', '30', '34', '5', '9']
    ordered = sorted(s, key=lambda x: x, reverse=True)  #通过sorted降序排序
    print(ordered)      #['9', '5', '34', '30', '3']

    #todo 2、首位相同的,进行二次排序

    for i in range(len(ordered) - 1):
        #todo 如果相邻两个字符的首字符相同,
        if ordered[i][0] == ordered[i + 1][0]:
            # todo 判断当前字符的末尾与下一个字符的首位进行比较,
            #todo  如果当前字符的末位小于下一个字符的首位,则进行交换位置
            if int(ordered[i][-1]) < int(ordered[i + 1][0]):
                ordered[i], ordered[i + 1] = ordered[i + 1], ordered[i]
    return ''.join(ordered)
nums = [10,2]
res=fn(nums)
print(res)


在这里插入图片描述

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

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

相关文章

前端vue集成echarts图形报表样例

文章目录 &#x1f412;个人主页&#x1f3c5;Vue项目常用组件模板仓库&#x1f4d6;前言&#xff1a;&#x1f415;1.在项目终端下载echarts依赖包&#x1f3e8;2.在main.js中导入echarts资源包并使用&#x1f380;3.在.vue文件中直接使用echarts&#xff0c;下面是一个样例&a…

计算机找不到x3daudio1_7.dll无法继续执行的5种解决方法

当我们在运行一款游戏时&#xff0c;遇到了“游戏找不到x3daudio1_7.dll”这样的错误提示&#xff0c;并因此无法继续执行游戏进程&#xff0c;这种情况具体是什么问题呢&#xff1f;我们可以深入解析一下。通常情况下&#xff0c;这种报错信息意味着系统缺失了一个关键的动态链…

144基于matlab的平面桁架结构的总体刚度矩阵计算

基于matlab的平面桁架结构的总体刚度矩阵计算&#xff0c;最后以图形形式显示出桁架结构&#xff0c;程序已调通&#xff0c;可直接运行。 144matlab 平面桁架 有限元分析 总体刚度 (xiaohongshu.com)

华为鸿蒙扩圈何时才会停息~

自从2023年华为秋季发布会上宣布鸿蒙Next不在兼容Android后&#xff0c;鸿蒙才开始扩圈行动&#xff0c;直到2024年1月18日鸿蒙千帆启航的仪式上宣布已有200鸿蒙原生态应用正在加速开发中&#xff0c;并且宣布启动了第二阶段的扩圈行动。 就1月25日就有多家银行和淘宝等支付平台…

Grafana loki配置, 无脑版

使用docker部署Grafana loki 1.创建 docker-compose.yml 文件 touch docker-compose.yml写入以下内容 vim touch docker-compose.yml version: "3"networks:loki:services:loki:image: grafana/loki:latestrestart: unless-stoppedports:- "3100:3100"vo…

1.24 C++ day1

思维导图 试编程 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数&#xff0c;要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {string s;cout << "please enter a str…

设置模式之责任链模式

目录 1.概述 2.结构 3.实现 4.总结 1.概述 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为性设计模式&#xff1b;它为请求创建了一个接收者对象的链&#xff0c;允许你将请求沿着处理者链进行发送。 收到请求后&#xff0c; 每个处理者均…

list的介绍及其模拟实现

今天我们了解list&#xff0c;list在python中是列表的意思 &#xff0c;但是在C中它是一个带头双向循环链表&#xff1a; list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xf…

1.25学习总结

今天学习了二叉树&#xff0c;了解了二叉树的创建和遍历的过程 今天所了解的遍历过程主要分为三种&#xff0c;前序中序和后序&#xff0c;都是DFS的想法 前序遍历&#xff1a;先输出在遍历左节点和右节点&#xff08;输出->左->右&#xff09; 中序遍历&#xff1a;先…

2024传薪文化盛大启航 年度论坛暨新春年会圆满举办

2024年1月20日下午, 由创人文/传薪文化理事会与长三角美好生活创新联盟主办,由传薪文化、九鲲文化承办的“文脉传万象薪”传薪&美创联2024甲辰年度论坛暨新春年会,在上海成功举办。来自学界、文化、经济和艺术等领域的社会精英人士170余人齐聚一堂,从历史和传承中汲取营养,…

elementplus 中 DatePicker 日期选择器样式修改无效

问题 遇到一个需求需要修改 DatePicker 日期选择器的样式&#xff0c;在添加了 scoped 属性的 style 标签&#xff0c;并且使用了 deep 样式穿透的情况下并不能修改其样式。 原因 DatePicker 日期选择器弹出面板默认挂载在 body 上&#xff0c;所以在组件中添加了 scoped 属…

MFC扩展库BCGControlBar Pro v34.0 - 图形管理器功能升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v34.0已正式发布了&#xff0c;该版本包括新的主题任务对话框、图像效果、旋转圆形刻度、…

【操作系统】实验六 分析源代码

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

Python爬虫 l 中国农药信息网的农药登记数据

一、爬取目标 二、完整源码 #""""""""""""""""""""""""""""""""""""""…

Docker网络及资源控制

目录 1.Docker网络 Docker网络实现原理 Docker的网络模式 host模式 container模式 none模式 bridge模式 自定义网络 2.资源控制 CPU资源控制 设置CPU使用率上限 设置CPU资源占用比 设置容器绑定指定的CPU 对内存使用的限制 对磁盘IO配额控制&#xff08;blkio&a…

泰迪科技最新大数据法律监督模型解决方案

大数据法律监督平台是基于监督数据整合管理平台、监督模型构建平台、内置模型库以及法律监督线索管理平台打造的一套服务于检察机关法律监督工作的专业化系统。通过数据采集、融合、挖掘、建模、展现等一系列能力&#xff0c;辅助检察官从纷繁复杂的数据中&#xff0c;开展多维…

手拉手JavaFX UI控件与springboot3+FX桌面开发

目录 javaFx文本 javaFX颜色 字体 Label标签 Button按钮 //按钮单击事件 鼠标、键盘事件 //(鼠标)双击事件 //键盘事件 单选按钮RadioButton 快捷键、键盘事件 CheckBox复选框 ChoiceBox选择框 Text文本 TextField(输入框)、TextArea文本域 //过滤 (传入一个参数&a…

【嵌入式学习】C++QT-Day1-C++基础

思维导图&&笔记 见我的博客&#xff1a;https://lingjun.life/wiki/EmbeddedNote/19Cpp 作业&#xff1a; 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 要求使用C风格字符串完成 #include <iostream&…

【K8S】Service使用NodePort对外暴露应用

一、背景介绍 Pod是有生命周期的&#xff0c;当一个工作节点(node)销毁时&#xff0c;节点上运行的pods也会被销毁。ReplicationController会动态地在其他节点上创建Pod来保持应用程序的运行&#xff0c;每一个Pod都有一个独立的IP地址&#xff0c;甚至是同一个节点上的Pod。可…

软件安装SQLyog

SQLyog 安装配置使用 首先下载SQLyog 软件&#xff0c;并解压 选择自己操作系统的版本 双击点击 .exe 文件&#xff0c;进行安装 选择安装语言&#xff0c;默认中文&#xff0c;直接点击【OK】即可 点击【下一步】 先【勾选】同意协议&#xff0c;再点击【下一步】 …