📌  相关文章
📜  Python3 程序查找字典序最小字符串旋转 |设置 1

📅  最后修改于: 2022-05-13 01:55:14.191000             🧑  作者: Mango

Python3 程序查找字典序最小字符串旋转 |设置 1

编写代码以查找圆形数组中的字典最小值,例如对于数组 BCABDADAB,字典最小值为 ABBCABDAD。
来源:谷歌笔试
更多示例:

Input:  GEEKSQUIZ
Output: EEKSQUIZG

Input:  GFG
Output: FGG

Input:  GEEKSFORGEEKS
Output: EEKSFORGEEKSG

以下是一个简单的解决方案。让给定的字符串为 'str'
1) 将 'str' 与其自身连接并存储在一个临时字符串中,例如 'concat'。
2)创建一个字符串数组来存储'str'的所有旋转。让数组为“arr”。
3) 通过在索引 0、1、2..n-1 处获取 'concat' 的子字符串来查找 'str' 的所有旋转。将这些旋转存储在 arr[]
4) 排序 arr[] 并返回 arr[0]。

以下是上述解决方案的实现。

Python3
# A simple Python3 program to find lexicographically 
# minimum rotation of a given string
  
# This function return lexicographically minimum
# rotation of str
def minLexRotation(str_) :
  
    # Find length of given string
    n = len(str_)
  
    # Create an array of strings to store all rotations
    arr = [0] * n
  
    # Create a concatenation of string with itself
    concat = str_ + str_
  
    # One by one store all rotations of str in array.
    # A rotation is obtained by getting a substring of concat
    for i in range(n) :
        arr[i] = concat[i : n + i]
  
    # Sort all rotations
    arr.sort()
  
    # Return the first rotation from the sorted array
    return arr[0]
  
# Driver Code
print(minLexRotation("GEEKSFORGEEKS"))
print(minLexRotation("GEEKSQUIZ"))
print(minLexRotation("BCABDADAB"))
  
# This code is contributed by divyamohan123


输出:

EEKSFORGEEKSG
EEKSQUIZG
ABBCABDAD

假设我们使用了 O(nLogn) 排序算法,上述解决方案的时间复杂度为 O(n 2 Logn)。
请参阅有关 Lexicographically minimum 字符串 rotation | 的完整文章设置 1 了解更多详情!