按字典顺序打印所有长度为 M 的不同圆形字符串
给定一个字符串和一个整数 M,按字典顺序打印所有长度为 M 的不同圆形字符串。
例子:
Input: str = “baaaa”, M = 3
Output: aaa aab aba baa
All possible circular substrings of length 3 are “baa” “aaa” “aaa” “aab” “aba”
Out of the 6, 4 are distinct, and the lexicographical order is aaa aab aba baa
Input: str = “saurav”, M = 3
Output: aura avsa ravs saur urav vsau
All possible circular substrings of length 4 are saur aura urav ravs avsa vsau.
All the substrings are distinct, the lexicographical order is aura avsa ravs saur urav vsau.
方法:使用substr函数解决问题。首先将字符串附加到自身。遍历字符串的长度以生成所有可能的长度为 M 的子字符串。 Set 在 C++ 中用于存储长度为 4 的所有不同子字符串,默认情况下,set 按字典顺序存储其所有元素。生成所有字符串后,从头开始打印集合中的元素。
下面是上述方法的实现:
C++
// C++ program to print all
// distinct circular strings
// of length M in lexicographical order
#include
using namespace std;
// Function to print all the distinct substrings
// in lexicographical order
void printStrings(string s, int l, int m)
{
// stores all the distinct substrings
set c;
// Append the string to self
s = s + s;
// Iterate over the length to generate
// all substrings of length m
for (int i = 0; i < l; i++) {
// insert the substring of length m
// in the set
c.insert(s.substr(i, m));
}
// prints all the distinct circular
// substrings of length m
while (!c.empty()) {
// Prints the substring
cout << *c.begin() << " ";
// erases the beginning element after
// printing
c.erase(c.begin());
}
}
// Driver code
int main()
{
string str = "saurav";
int N = str.length();
int M = 4;
printStrings(str, N, M);
return 0;
}
Java
// Java program to print all
// distinct circular strings
// of length M in lexicographical order
import java.util.*;
class GFG
{
// Function to print all the distinct substrings
// in lexicographical order
static void printStrings(String s, int l, int m)
{
// stores all the distinct substrings
Set c = new LinkedHashSet<>();
// Append the string to self
s = s + s;
// Iterate over the length to generate
// all substrings of length m
for (int i = 0; i < l; i++)
{
// insert the substring of length m
// in the set
c.add(s.substring(i, i+m));
}
// prints all the distinct circular
// substrings of length m
Iterator itr = c.iterator();
while (itr.hasNext())
{
// Prints the substring
String a =(String) itr.next();
System.out.print(a+" ");
}
c.clear();
}
// Driver code
public static void main(String[] args)
{
String str = "saurav";
int N = str.length();
int M = 4;
printStrings(str, N, M);
}
}
// This code contributed by Rajput-Ji
Python3
# Python program to print all
# distinct circular strings
# of length M in lexicographical order
# Function to print all the distinct substrings
# in lexicographical order
def printStrings(s, l, m):
# stores all the distinct substrings
c = set()
# Append the string to self
s = s+s
# Iterate over the length to generate
# all substrings of length m
for i in range(l):
# insert the substring of length m
# in the set
c.add(s[i:i+m])
# prints all the distinct circular
# substrings of length m
for i in c:
# Prints the substring
print(i, end=" ")
# Driver code
if __name__ == "__main__":
string = "saurav"
N = len(string)
M = 4
printStrings(string, N, M)
# This code is contributed by
# sanjeev2552
C#
// C# program to print all
// distinct circular strings
// of length M in lexicographical order
using System;
using System.Collections.Generic;
class GFG
{
// Function to print all the distinct substrings
// in lexicographical order
static void printStrings(String s, int l, int m)
{
// stores all the distinct substrings
HashSet c = new HashSet();
// Append the string to self
s = s + s;
// Iterate over the length to generate
// all substrings of length m
for (int i = 0; i < l; i++)
{
// insert the substring of length m
// in the set
c.Add(s.Substring(i, m));
}
// prints all the distinct circular
// substrings of length m
foreach (string i in c)
{
string a = (string)i;
Console.Write(a + " ");
}
c.Clear();
}
// Driver code
public static void Main(String[] args)
{
String str = "saurav";
int N = str.Length;
int M = 4;
printStrings(str, N, M);
}
}
// This code contributed by
// sanjeev2552
Javascript
aura avsa ravs saur urav vsau
时间复杂度:O(N*M),其中 N 是字符串的长度。