我是靠谱客的博主 含蓄金针菇,最近开发中收集的这篇文章主要介绍[leetcode] 1625. Lexicographically Smallest String After Applying Operations,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Description

You are given a string s of even length consisting of digits from 0 to 9, and two integers a and b.

You can apply either of the following two operations any number of times and in any order on s:

  • Add a to all odd indices of s (0-indexed). Digits post 9 are cycled back to 0. For example, if s = “3456” and a = 5, s becomes “3951”.
  • Rotate s to the right by b positions. For example, if s = “3456” and b = 1, s becomes “6345”.

Return the lexicographically smallest string you can obtain by applying the above operations any number of times on s.

A string a is lexicographically smaller than a string b (of the same length) if in the first position where a and b differ, string a has a letter that appears earlier in the alphabet than the corresponding letter in b. For example, “0158” is lexicographically smaller than “0190” because the first position they differ is at the third letter, and ‘5’ comes before ‘9’.

Example 1:

Input: s = "5525", a = 9, b = 2
Output: "2050"
Explanation: We can apply the following operations:
Start:
"5525"
Rotate: "2555"
Add:
"2454"
Add:
"2353"
Rotate: "5323"
Add:
"5222"
​​​​​​​Add:
"5121"
​​​​​​​Rotate: "2151"
​​​​​​​Add:
"2050"​​​​​​​​​​​​
There is no way to obtain a string that is lexicographically smaller then "2050".

Example 2:

Input: s = "74", a = 5, b = 1
Output: "24"
Explanation: We can apply the following operations:
Start:
"74"
Rotate: "47"
​​​​​​​Add:
"42"
​​​​​​​Rotate: "24"​​​​​​​​​​​​
There is no way to obtain a string that is lexicographically smaller then "24".

Example 3:

Input: s = "0011", a = 4, b = 2
Output: "0011"
Explanation: There are no sequence of operations that will give us a lexicographically smaller string than "0011".

Example 4:

Input: s = "43987654", a = 7, b = 3
Output: "00553311"

Constraints:

  • 2 <= s.length <= 100
  • s.length is even.
  • s consists of digits from 0 to 9 only.
  • 1 <= a <= 9
  • 1 <= b <= s.length - 1

分析

题目的意思是:给定一个字符串s,可以对字符串使用add和rotate操作,求能够得到的最小字符串。这道题最简单直接的思路就是把所能求得的字符串都列举出来,然后选一个最小就行了。

  • 实现add操作
  • 实现rotate操作
  • 队列q中放入s,然后遍历队列,把add和rotate操作拓展的字符串放回队列中;seen记录已经得到的字符串,防止重复计算。
  • 最终在seen中找到最小的字符串返回就行了。

代码

class Solution:
def add(self,s,a):
new_s=''
for i in range(len(s)):
if(i%2==0):
new_s+=s[i]
else:
new_s+=str(int(s[i])+a)[-1]
return new_s
def rotate(self,s,b):
return s[len(s)-b:]+s[:len(s)-b]
def findLexSmallestString(self, s: str, a: int, b: int) -> str:
seen=set()
q=deque()
q.append(s)
while(q):
cur=q.popleft()
if(cur not in seen):
seen.add(cur)
q.append(self.add(cur,a))
q.append(self.rotate(cur,b))
# print(seen)
return min(seen)

参考文献

Python, Easy to understand

最后

以上就是含蓄金针菇为你收集整理的[leetcode] 1625. Lexicographically Smallest String After Applying Operations的全部内容,希望文章能够帮你解决[leetcode] 1625. Lexicographically Smallest String After Applying Operations所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部