LeetCode 3216. 交换后字典序最小的字符串[简单]

. - 力扣(LeetCode)

题目

给你一个仅由数字组成的字符串 s,在最多交换一次 相邻 且具有相同 奇偶性 的数字后,返回可以得到的字典序最小的字符串。

相同奇偶性:如果两个数字都是奇数或都是偶数,则它们具有相同的奇偶性。例如,5 和 9、2 和 4 奇偶性相同,而 6 和 9 奇偶性不同。

  • 示例 1:
    • 输入: s = "45320"
    • 输出: "43520"
    • 解释:s[1] == '5' 和 s[2] == '3' 都具有相同的奇偶性,交换它们可以得到字典序最小的字符串。
  • 示例 2:
    • 输入: s = "001"
    • 输出: "001"
    • 解释:无需进行交换,因为 s 已经是字典序最小的。

提示:

  • 2 <= s.length <= 100
  • s 仅由数字组成。

解题方法

字符串方法

  • 相同奇偶性的数学性质:
    • 两个奇数相加, 和是偶数
    • 两个偶数相加,和是偶数

因此相同奇偶性的两个数相加,和一定是偶数;

如果一个奇数和一个偶数相加,则和是奇数。

class Solution:def getSmallestString(self, s: str) -> str:small_str = s # 记录最小字符串for index, c in enumerate(s):if index == len(s) - 1:breaknext_c = s[index + 1]if c == next_c or (int(c) + int(next_c)) % 2 != 0:continue# 交换后的新字符串temp_str = s[0: index] + next_c + cif index < len(s) - 2:temp_str += s[index + 2:]# 更新最小字符串if temp_str < small_str:small_str = temp_strreturn small_str

分析复杂度

记字符串长度为n

  • 时间复杂度:鉴于 Python字符串是不可变的,因此生成交换后的新字符串实际是一个字符串copy的过程,时间复杂度是O(n),又因为字符串长度为n,即遍历了n次,所以时间复杂度是O(n^2)

  • 空间复杂度:small_str长度为n,遍历过程中始终存在一个长度为n的temp_str,因此空间复杂度为2n, 即O(n)

贪心算法

  • 优化点1:字符串是不可变的,因此交换字符位置需要复制整个字符串,时间复杂度为O(n).如果将字符串转为list, 则交换字符位置仅需要O(1)的时间复杂度。
  • 优化点2:贪心算法如果相同奇偶性的两个数字,
    • 第一个数字小于第二个数字,则不需要交换(因为交换后字符串更大);
    • 反之,则需要交换,找到第一个可以交换的位置即可。

 

class Solution:def getSmallestString(self, s: str) -> str:t = list(s)for i in range(1, len(t)):x, y = t[i - 1], t[i]if (int(x) + int(y)) % 2 == 0 and x > y:t[i - 1], t[i] = y, xbreakreturn ''.join(t)

分析复杂度

  • 时间复杂度:遍历n次,每次遍历最多有一次交换操作(交换时间复杂度为O(1) ),因此时间复杂度为O(n)
  • 空间复杂度:初始化了与字符串相同长度的list t, 因此空间复杂度O(n)

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

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

相关文章

建筑行业员工离职SOP的数字化管理

在建筑行业&#xff0c;随着数字化转型的深入&#xff0c;对员工离职的标准操作程序&#xff08;SOP&#xff09;进行数字化管理变得尤为重要。这不仅有助于提高管理效率&#xff0c;还能确保离职流程的规范性和合规性。本文将探讨建筑行业如何通过数字化手段管理员工离职SOP&a…

【你也能从零基础学会网站开发】 SQL Server结构化查询语言数据操作应用--DML篇 浅谈SQL JOIN多表查询之FULL JOIN 全连接查询

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 FULL JOIN 全连…

高效数据集成:从旺店通到金蝶云

高效数据集成&#xff1a;从旺店通到金蝶云 旺店通旗舰奇门数据集成到金蝶云星空&#xff1a;柏为销售出库单07.25 在现代企业的运营中&#xff0c;数据的高效流转和准确对接是确保业务顺畅运行的关键。本文将分享一个实际案例——如何通过轻易云数据集成平台&#xff0c;将旺…

Python进阶之IO操作

文章目录 一、文件的读取二、文件内容的写入三、之操作文件夹四、StringIO与BytesIO 一、文件的读取 在python里面&#xff0c;可以使用open函数来打开文件&#xff0c;具体语法如下&#xff1a; open(filename, mode)filename&#xff1a;文件名&#xff0c;一般包括该文件所…

Bert框架详解(上)

目录 一、传统的自然语言处理框架存在的问题 1、RNN网络计算时存在的问题 2、传统word2vec存在的问题 二、Bert模型机制 1、编码-解码框架&#xff08;Encoder-Decoder&#xff09; &#xff08;1&#xff09;、编码器&#xff08;Encoder&#xff09; &#xff08;2&…

SuperMap iDesktop 崖山数据库型的数据源创建

作者&#xff1a;lzzzz 本文主要介绍如何创建崖山数据库型的数据源&#xff0c;使用版本为超图idesktopX&#xff1a;11.2.1 &#xff0c;使用环境&#xff1a;Windows 10&#xff1b;yashandb&#xff1a;23.2.5.100&#xff0c;使用环境&#xff1a;centos 7.9。 崖山数据库…

今日 AI 简报| Claude 推出 AI 自动化操作电脑功能、浏览器 AI 助手、全栈 AI 应用构建器、全能文档解析工具等

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…

VS2022远程连接调试编译Linux环境下的C++代码

工具&#xff1a;VS2022 虚拟机&#xff1a;RHEL 8.0 一、下载必要工具 1.VS2022组件安装 打开VS2022Installer&#xff0c;点击修改下载必要工具。 选择Linux 和嵌入式开发&#xff0c;然后点击右下角的修改&#xff01; 等待安装........ 安装完成后&#xff0c;创建Linu…

详解Java之Spring MVC篇二

目录 获取Cookie/Session 理解Cookie 理解Session Cookie和Session的区别 获取Cookie 获取Session 获取Header 获取User-Agent 获取Cookie/Session 理解Cookie HTTP协议自身是“无状态”协议&#xff0c;但是在实际开发中&#xff0c;我们很多时候是需要知道请求之间的…

基于SSM的学生考勤管理系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

鸿萌数据迁移服务: 完善的数据迁移策略, 是数据迁移项目成功的保障

天津鸿萌科贸发展有限公司从事数据安全服务二十余年&#xff0c;致力于为各领域客户提供专业的数据存储、数据恢复、数据备份、数据迁移等解决方案与服务&#xff0c;并针对企业面临的数据安全风险&#xff0c;提供专业的相关数据安全培训。 鸿萌数据迁移业务为众多企业顺利高效…

穿越文化与时空的回响——从廖问洁《红豆诗词选》看当代人文情怀

穿越文化与时空的回响 ——从廖问洁《红豆诗词选》看当代人文情怀 在快节奏的现代生活中&#xff0c;我们时常感到身心的疲惫&#xff0c;渴望找到一种能够洗涤内心的方式。而廖问洁的《红豆诗词选》就如同一股清泉&#xff0c;为我们带来了心灵的洗礼和慰藉。 这位来自94年的…

机器学习—TensorFlow实现

继续运行手写数字识别的示例&#xff0c;识别此图像&#xff0c;一个0还是1&#xff0c;我们所使用的是神经网络架构&#xff0c;其中有一个输入X&#xff0c;然后是第一个隐藏层&#xff0c;有25个单位&#xff0c;第二个隐藏层&#xff0c;有15个单元&#xff0c;然后一个输出…

外包干了两年,快要废了。。。。

先说一下自己的情况&#xff0c;普通本科&#xff0c;在外包干了2年多的功能测试&#xff0c;这几年因为大环境不好&#xff0c;我整个人心惊胆战的&#xff0c;怕自己卷铺盖走人了&#xff0c;我感觉自己不能够在这样蹉跎下去了&#xff0c;长时间呆在一个舒适的环境真的会让一…

基于backtrader实现人工智能LOF的择时,optstrategy实现最优参数搜索(年化从9%提升至15.4%)

原创内容第695篇&#xff0c;专注量化投资、个人成长与财富自由。 今日策略 今天的策略是基于backtrader实现人工智能LOF的择时&#xff0c;通过backtrader的参数优化功能&#xff0c;找到最优参数。 策略主体&#xff1a; 策略有三个参数&#xff0c;一是动量周期&#xff…

autodl怎么清理数据盘垃圾缓存

首先进入到root/autodl-tmp文件夹下&#xff0c;然后执行这个命令 du -h --max-depth1 .查看当前目录下各个子目录占用的内存 可以看到&#xff0c;./.Trash-0 目录下有太多垃圾了。清理 ./.Trash-0 目录&#xff0c;可以使用以下命令来删除该目录中的所有内容 rm -rf ./.Tr…

ctfshow(162)--文件上传漏洞--远程文件包含

Web162 进入界面&#xff1a; 思路 先传个文件测试一下过滤&#xff1a; 过滤了特别多符号&#xff0c;注意过滤了点. 我们的思路还是要先上传.user.ini文件: //修改前 GIF89a auto_prepend_fileshell.png//由于过滤了点&#xff0c;所以修改为 GIF89a auto_prepend_file…

开源IM即时通讯源码 / Java仿微信即时通讯APP源码 + 红包 + 客服 + 禁言 / WebSocket + uniapp框架开发

即时通讯应用已经成为现代社交和工作环境中的重要工具&#xff0c;而IM&#xff08;即时通讯&#xff09;系统的设计与开发也逐渐成为开发者关注的重点。本文将介绍一个基于Java开发的开源IM即时通讯系统&#xff0c;模拟微信的即时通讯功能&#xff0c;涵盖了红包、客服、禁言…

拒绝事后背锅:测试项目中的风险管理一定要知道

在博主的公司中&#xff0c;测试经理除了要管理产品线的质量保障和日常部门事务工作外&#xff0c;另一项比较重要的就是测试项目全流程的管理。 今天不聊整体的测试项目流程如何开展&#xff0c;而是想聊一聊在同行中比较高频出现的一个字眼&#xff1a;风险管理。 什么是风…

4.1 WINDOWS XP,ReactOS对象与对象目录----1

系列文章目录 文章目录 系列文章目录4.1 对象与对象目录OBJECT_HEADERObpLookupEntryDirectory()NtCreateTimer() 4.1 对象与对象目录 “对象(Object)”这个词现在大家都已耳熟能详了&#xff0c;但是对象到底是什么呢?广义地说&#xff0c;对象就是“目标”&#xff0c;行为…