当前位置: 首页 > news >正文

【LeetCode:3106. 满足距离约束且字典序最小的字符串 + 贪心】

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ 贪心
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 3106. 满足距离约束且字典序最小的字符串

⛲ 题目描述

给你一个字符串 s 和一个整数 k 。

定义函数 distance(s1, s2) ,用于衡量两个长度为 n 的字符串 s1 和 s2 之间的距离,即:

字符 ‘a’ 到 ‘z’ 按 循环 顺序排列,对于区间 [0, n - 1] 中的 i ,计算所有「 s1[i] 和 s2[i] 之间 最小距离」的 和 。
例如,distance(“ab”, “cd”) == 4 ,且 distance(“a”, “z”) == 1 。

你可以对字符串 s 执行 任意次 操作。在每次操作中,可以将 s 中的一个字母 改变 为 任意 其他小写英文字母。

返回一个字符串,表示在执行一些操作后你可以得到的 字典序最小 的字符串 t ,且满足 distance(s, t) <= k 。

示例 1:

输入:s = “zbbz”, k = 3
输出:“aaaz”
解释:在这个例子中,可以执行以下操作:
将 s[0] 改为 ‘a’ ,s 变为 “abbz” 。
将 s[1] 改为 ‘a’ ,s 变为 “aabz” 。
将 s[2] 改为 ‘a’ ,s 变为 “aaaz” 。
“zbbz” 和 “aaaz” 之间的距离等于 k = 3 。
可以证明 “aaaz” 是在任意次操作后能够得到的字典序最小的字符串。
因此,答案是 “aaaz” 。
示例 2:

输入:s = “xaxcd”, k = 4
输出:“aawcd”
解释:在这个例子中,可以执行以下操作:
将 s[0] 改为 ‘a’ ,s 变为 “aaxcd” 。
将 s[2] 改为 ‘w’ ,s 变为 “aawcd” 。
“xaxcd” 和 “aawcd” 之间的距离等于 k = 4 。
可以证明 “aawcd” 是在任意次操作后能够得到的字典序最小的字符串。
因此,答案是 “aawcd” 。
示例 3:

输入:s = “lol”, k = 0
输出:“lol”
解释:在这个例子中,k = 0,更改任何字符都会使得距离大于 0 。
因此,答案是 “lol” 。

提示:

1 <= s.length <= 100
0 <= k <= 2000
s 只包含小写英文字母。

🌟 求解思路&实现代码&运行结果


⚡ 贪心

🥦 求解思路
  1. 我们优先把左边的字母变成 a。想把当前的字符变成 a,可以把当前的位置,从左边不断减一到 a,从右边不断加一到 a,二者取最小值,得最小的操作距离返回。
  2. 因为题目限制s到t的distance小于等于k,所有在判断distance距离的时候,如果此时distance小于等于 k,当前位置减少到a,k减少此时distance的距离;否则,如果大于,当前位置直接减少k,直接结束。
  3. 最后返回此时的字符串。
  4. 有了基本的思路,接下来我们就来通过代码来实现一下的解法。
🥦 实现代码
class Solution {public String getSmallestString(String s, int k) {char[] t = s.toCharArray();for (int i = 0; i < t.length; i++) {int dis = Math.min(t[i] - 'a', 'z' - t[i] + 1);if (dis > k) {t[i] -= k;break;}t[i] = 'a';k -= dis;}return new String(t);}
}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/408298.html

相关文章:

  • 25 Python常用函数——reduce()
  • oracle登录报“ORA-27101: shared memory realm does not exist”
  • 界面控件Telerik UI for WPF 2024 Q2亮点 - 全新的AIPrompt组件
  • IT服务运营过程中的资源要素管理(至简)
  • wodpress设置固定链接的方式和好处【SEO优化】
  • 【C#】 CancellationTokenSource 与Thread的启动、取消的区别?
  • 基于 HTML+ECharts 实现智慧运维数据可视化大屏(含源码)
  • AIGC(Artificial Intelligence Generated Content)
  • 02 MySQL数据库管理
  • C++编程: 使用 Nanomsg 进行 PUB-SUB 模式基准测试
  • 【Unity2D 2022:Data】读取csv格式文件的数据
  • 美团测开面经整理大汇总!!
  • 微信公众号获取用户openid(PHP版,snsapi_base模式)
  • DuckDB核心模块揭秘 | 第1期 | 向量化执行引擎之Pipeline
  • Vue如何让用户通过a链接点击下载一个excel文档
  • 美摄科技企业级视频拍摄与编辑SDK解决方案
  • MySQL:增删改查、临时表、授权相关示例
  • 初识git工具~~上传代码到gitee仓库的方法
  • Redis知识点总价
  • 大语言模型-GPT-Generative Pre-Training
  • mybatis批量插入、mybatis-plus批量插入、mybatis实现insertList、mybatis自定义实现批量插入
  • Springboot项目的行为验证码AJ-Captcha(源码解读)
  • 【初阶数据结构篇】时间(空间)复杂度
  • C# 设计模式分类
  • 前端模块化CommonJS、AMD、CMD、ES6
  • 论文阅读:(DETR)End-to-End Object Detection with Transformers
  • react中路由跳转以及路由传参
  • C++ STL set_symmetric_difference
  • postman请求响应加解密
  • 数据集,批量更新分类数值OR批量删除分类行数据