📌  相关文章
📜  打印所有可能由一组n个字符组成的长度为k的字符串

📅  最后修改于: 2021-04-26 07:50:00             🧑  作者: Mango

给定一组字符和一个正整数k,请打印可以从给定组形成的所有可能的长度为k的字符串。
例子:

Input: 
set[] = {'a', 'b'}, k = 3

Output:
aaa
aab
aba
abb
baa
bab
bba
bbb


Input: 
set[] = {'a', 'b', 'c', 'd'}, k = 1
Output:
a
b
c
d

对于给定的大小为n的集合,将存在n个k个长度为k的字符串。这个想法是从一个空的输出字符串的(在下面的代码中我们称其为前缀)。将所有字符一一添加到prefix 。对于每个添加的字符,通过递归调用k等于k-1来打印具有当前前缀的所有可能的字符串。
下面是上述想法的实现:

C++
// C++ program to print all
// possible strings of length k
#include 
using namespace std;
     
 
// The main recursive method
// to print all possible
// strings of length k
void printAllKLengthRec(char set[], string prefix,
                                    int n, int k)
{
     
    // Base case: k is 0,
    // print prefix
    if (k == 0)
    {
        cout << (prefix) << endl;
        return;
    }
 
    // One by one add all characters
    // from set and recursively
    // call for k equals to k-1
    for (int i = 0; i < n; i++)
    {
        string newPrefix;
         
        // Next character of input added
        newPrefix = prefix + set[i];
         
        // k is decreased, because
        // we have added a new character
        printAllKLengthRec(set, newPrefix, n, k - 1);
    }
 
}
 
void printAllKLength(char set[], int k,int n)
{
    printAllKLengthRec(set, "", n, k);
}
 
// Driver Code
int main()
{
     
    cout << "First Test" << endl;
    char set1[] = {'a', 'b'};
    int k = 3;
    printAllKLength(set1, k, 2);
     
    cout << "Second Test\n";
    char set2[] = {'a', 'b', 'c', 'd'};
    k = 1;
    printAllKLength(set2, k, 4);
}
 
// This code is contributed
// by Mohit kumar


Java
// Java program to print all
// possible strings of length k
 
class GFG {
     
// The method that prints all
// possible strings of length k.
// It is mainly a wrapper over
// recursive function printAllKLengthRec()
static void printAllKLength(char[] set, int k)
{
    int n = set.length;
    printAllKLengthRec(set, "", n, k);
}
 
// The main recursive method
// to print all possible
// strings of length k
static void printAllKLengthRec(char[] set,
                               String prefix,
                               int n, int k)
{
     
    // Base case: k is 0,
    // print prefix
    if (k == 0)
    {
        System.out.println(prefix);
        return;
    }
 
    // One by one add all characters
    // from set and recursively
    // call for k equals to k-1
    for (int i = 0; i < n; ++i)
    {
 
        // Next character of input added
        String newPrefix = prefix + set[i];
         
        // k is decreased, because
        // we have added a new character
        printAllKLengthRec(set, newPrefix,
                                n, k - 1);
    }
}
 
// Driver Code
public static void main(String[] args)
{
    System.out.println("First Test");
    char[] set1 = {'a', 'b'};
    int k = 3;
    printAllKLength(set1, k);
     
    System.out.println("\nSecond Test");
    char[] set2 = {'a', 'b', 'c', 'd'};
    k = 1;
    printAllKLength(set2, k);
}
}


Python 3
# Python 3 program to print all
# possible strings of length k
     
# The method that prints all
# possible strings of length k.
# It is mainly a wrapper over
# recursive function printAllKLengthRec()
def printAllKLength(set, k):
 
    n = len(set)
    printAllKLengthRec(set, "", n, k)
 
# The main recursive method
# to print all possible
# strings of length k
def printAllKLengthRec(set, prefix, n, k):
     
    # Base case: k is 0,
    # print prefix
    if (k == 0) :
        print(prefix)
        return
 
    # One by one add all characters
    # from set and recursively
    # call for k equals to k-1
    for i in range(n):
 
        # Next character of input added
        newPrefix = prefix + set[i]
         
        # k is decreased, because
        # we have added a new character
        printAllKLengthRec(set, newPrefix, n, k - 1)
 
# Driver Code
if __name__ == "__main__":
     
    print("First Test")
    set1 = ['a', 'b']
    k = 3
    printAllKLength(set1, k)
     
    print("\nSecond Test")
    set2 = ['a', 'b', 'c', 'd']
    k = 1
    printAllKLength(set2, k)
 
# This code is contributed
# by ChitraNayal


C#
// C# program to print all
// possible strings of length k
using System;
 
class GFG {
     
// The method that prints all
// possible strings of length k.
// It is mainly a wrapper over
// recursive function printAllKLengthRec()
static void printAllKLength(char[] set, int k)
{
    int n = set.Length;
    printAllKLengthRec(set, "", n, k);
}
 
// The main recursive method
// to print all possible
// strings of length k
static void printAllKLengthRec(char[] set,
                               String prefix,
                               int n, int k)
{
     
    // Base case: k is 0,
    // print prefix
    if (k == 0)
    {
        Console.WriteLine(prefix);
        return;
    }
 
    // One by one add all characters
    // from set and recursively
    // call for k equals to k-1
    for (int i = 0; i < n; ++i)
    {
 
        // Next character of input added
        String newPrefix = prefix + set[i];
         
        // k is decreased, because
        // we have added a new character
        printAllKLengthRec(set, newPrefix,
                                n, k - 1);
    }
}
 
// Driver Code
static public void Main ()
{
    Console.WriteLine("First Test");
    char[] set1 = {'a', 'b'};
    int k = 3;
    printAllKLength(set1, k);
     
    Console.WriteLine("\nSecond Test");
    char[] set2 = {'a', 'b', 'c', 'd'};
    k = 1;
    printAllKLength(set2, k);
}
}
 
// This code is contributed by Ajit.


Javascript


输出:

First Test
aaa
aab
aba
abb
baa
bab
bba
bbb

Second Test
a
b
c
d