• 将's'向右旋转b个位置。

  • 因此,我们必须通过对s进行任意次数的上述操作,才能找到按字典顺序排列的最小字符串。

    因此,如果输入类似于s="5323"a=9b=2,那么输出将是2050,因为如果我们遵循

  • 旋转:“5323”

  • 添加:“5222”

  • 添加:“5121”

  • 旋转:“2151”

  • 添加:“2050”

  • 示例

    让我们看看以下实现以获得更好的理解-

    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

    热门推荐