给定一个字符串,按字典顺序查找所有子字符串的串联。
例子:
Input : s = “abc”
Output : aababcbbcc
The substrings of s in lexicographic order are “a”, “b”, “c”, “ab”, “abc”, “bc”. Concatenation of substrings is “a”+”ab”+”abc”+”b”+”bc”+”c” = “aababcbbcc”.
Input : s = “cba”
Output : abbaccbcba
1.查找字符串的所有子字符串并将其存储在字符串数组中。数组的大小为n *(n + 1)/ 2,其中n是输入字符串的长度。
2.对字符串数组进行排序,以按字典顺序排列它们。
3.将字符串数组的字符串连接到另一个空字符串。
C++
// CPP Program to create concatenation of all
// substrings in lexicographic order.
#include
using namespace std;
string lexicographicSubConcat(string s)
{
int n = s.length();
// Creating an array to store substrings
int sub_count = n*(n+1)/2;
string arr[sub_count];
// finding all substrings of string
int index = 0;
for (int i = 0; i < n; i++)
for (int len = 1; len <= n - i; len++)
arr[index++] = s.substr(i, len);
// Sort all substrings in lexicographic
// order
sort(arr, arr + sub_count);
// Concatenating all substrings
string res = "";
for (int i = 0; i < sub_count; i++)
res += arr[i];
return res;
}
int main()
{
string s = "abc";
cout << lexicographicSubConcat(s);
return 0;
}
Java
// Java Program to create concatenation of all
// substrings in lexicographic order.
import java.util.*;
class GFG
{
static String lexicographicSubConcat(String s)
{
int n = s.length();
// Creating an array to store substrings
int sub_count = n*(n+1)/2;
String []arr = new String[sub_count];
// finding all substrings of string
int index = 0;
for (int i = 0; i < n; i++)
for (int len = 1; len <= n - i; len++)
{
arr[index++] = s.substring(i, i+len);
}
// Sort all substrings in lexicographic
// order
Arrays.sort(arr);
// Concatenating all substrings
String res = "";
for (int i = 0; i < sub_count; i++)
res += arr[i];
return res;
}
// Driver code
public static void main(String[] args)
{
String s = "abc";
System.out.println(lexicographicSubConcat(s));
}
}
// This code has been contributed by 29AjayKumar
Python3
# Python Program to create concatenation of all
# substrings in lexicographic order.
def lexicographicSubConcat(s):
n = len(s);
# Creating an array to store substrings
sub_count = (n * (n + 1))//2;
arr = [0]*sub_count;
# finding all substrings of string
index = 0;
for i in range(n):
for j in range(1,n - i + 1):
arr[index] = s[i:i + j];
index += 1;
# Sort all substrings in lexicographic
# order
arr.sort();
# Concatenating all substrings
res = "";
for i in range(sub_count):
res += arr[i];
return res;
s = "abc";
print(lexicographicSubConcat(s));
# This code is contributed by Princi Singh
C#
// C# Program to create concatenation of all
// substrings in lexicographic order.
using System;
class GFG
{
static String lexicographicSubConcat(String s)
{
int n = s.Length;
// Creating an array to store substrings
int sub_count = n*(n+1)/2;
String []arr = new String[sub_count];
// finding all substrings of string
int index = 0;
for (int i = 0; i < n; i++)
for (int len = 1; len <= n - i; len++)
{
arr[index++] = s.Substring(i, len);
}
// Sort all substrings in lexicographic
// order
Array.Sort(arr);
// Concatenating all substrings
String res = "";
for (int i = 0; i < sub_count; i++)
res += arr[i];
return res;
}
// Driver code
public static void Main(String[] args)
{
String s = "abc";
Console.WriteLine(lexicographicSubConcat(s));
}
}
/* This code contributed by PrinciRaj1992 */
输出:
aababcbbcc