📌  相关文章
📜  按字典顺序打印所有长度为 M 的不同圆形字符串

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

按字典顺序打印所有长度为 M 的不同圆形字符串

给定一个字符串和一个整数 M,按字典顺序打印所有长度为 M 的不同圆形字符串。

例子:

方法:使用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 是字符串的长度。