在 Python 中应用操作后查找字典顺序最小字符串的程序
pythonserver side programmingprogramming更新于 2025/11/30 2:20:17
假设我们有一个字符串 s,其中只有数字,还有两个值 a 和 b。我们可以对 s − 应用以下两个操作中的任意一个,次数和顺序均可。
将"a"添加到 s(从 0 开始索引)的所有奇数位置项。如果数字为 9,则通过添加某个值将循环回 0。
将"s"向右旋转 b 个位置。
因此,我们必须通过对 s 应用上述操作任意次,找到我们可以获得的字典顺序最小的字符串。
因此,如果输入为 s = "5323" a = 9 b = 2,则输出将为 2050,因为如果我们遵循
- 旋转:"5323"
- 添加:"5222"
- 添加:"5121"
- 旋转:"2151"
- 添加:"2050"
为了解决这个问题,我们将遵循以下步骤 −
- seen := 一个新集合
- deq := 一个包含一个元素"s"的新队列
- 当 deq 不为空时,执行
- curr := 第一个被删除的元素deq
- 将 curr 插入到 seen 集合中
- ad := 对 curr 执行给定的添加操作
- 如果 ad 不在 seen 中,则
- 在 deq 末尾插入 ad
- 将 ad 插入到 seen 集合中
- ro := 对 curr 执行旋转操作
- 如果 ro 不在 seen 中,则
- 在 deq 末尾插入 ro
- 将 ro 插入 seen 集合中
- 返回 seen 的最小值
示例
让我们看看下面的实现以便更好地理解 −
from collections import deque def add_(s,a): res = '' for idx, i in enumerate(s): if idx % 2 == 1: num = (int(i) + a) % 10 res += str(num) else: res += i return res def rotate_(s, b): idx = len(s)-b res = s[idx:] + s[0:idx] return res def solve(s, a, b): seen = set() deq = deque([s]) while deq: curr = deq.popleft() seen.add(curr) ad = add_(curr, a) if ad not in seen: deq.append(ad) seen.add(ad) ro = rotate_(curr, b) if ro not in seen: deq.append(ro) seen.add(ro) return min(seen) s = "5323" a = 9 b = 2 print(solve(s, a, b))
输入
"5323", 9, 2
输出
2050
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

