Java程序查找字典序最小字符串旋转设置 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]。
以下是上述解决方案的实现。
Java
// A simple Java program to find
// lexicographically minimum rotation
// of a given String
import java.util.*;
class GFG
{
// This functionr return lexicographically
// minimum rotation of str
static String minLexRotation(String str)
{
// Find length of given String
int n = str.length();
// Create an array of strings
// to store all rotations
String arr[] = new String[n];
// Create a concatenation of
// String with itself
String concat = str + str;
// One by one store all rotations
// of str in array. A rotation is
// obtained by getting a substring of concat
for (int i = 0; i < n; i++)
{
arr[i] = concat.substring(i, i + n);
}
// Sort all rotations
Arrays.sort(arr);
// Return the first rotation
// from the sorted array
return arr[0];
}
// Driver code
public static void main(String[] args)
{
System.out.println(minLexRotation("GEEKSFORGEEKS"));
System.out.println(minLexRotation("GEEKSQUIZ"));
System.out.println(minLexRotation("BCABDADAB"));
}
}
// This code is contributed by 29AjayKumar
输出:
EEKSFORGEEKSG
EEKSQUIZG
ABBCABDAD
假设我们使用了 O(nLogn) 排序算法,上述解决方案的时间复杂度为 O(n 2 Logn)。
请参阅有关 Lexicographically minimum 字符串 rotation | 的完整文章设置 1 了解更多详情!