📌  相关文章
📜  生成给定字符串的所有旋转

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

生成给定字符串的所有旋转

给定一个字符串S。任务是打印给定字符串的所有可能旋转的字符串。

例子:

Input : S = "geeks"
Output : geeks
         eeksg
         eksge
         ksgee
         sgeek

Input : S = "abc" 
Output : abc
         bca
         cab

方法1(简单)
这个想法是从 i = 0 到 n – 1 (n =字符串长度)运行一个循环,即对于每个旋转点,将字符串的第二部分复制到临时字符串中,然后复制原始字符串的第一部分到临时字符串。

下面实现这种方法:

C++
// A simple C++ program to generate all rotations
// of a given string
#include
using namespace std;
 
// Print all the rotated string.
void printRotatedString(char str[])
{
    int len = strlen(str);
 
    // Generate all rotations one by one and print
    char temp[len];
    for (int i = 0; i < len; i++)
    {
        int j = i;  // Current index in str
        int k = 0;  // Current index in temp
 
        // Copying the second part from the point
        // of rotation.
        while (str[j] != '\0')
        {
            temp[k] = str[j];
            k++;
            j++;
        }
 
        // Copying the first part from the point
        // of rotation.
        j = 0;
        while (j < i)
        {
            temp[k] = str[j];
            j++;
            k++;
        }
 
        printf("%s\n", temp);
    }
}
 
// Driven Program
int main()
{
    char str[] = "geeks";
    printRotatedString(str);
    return 0;
}


Java
// A simple Java program to generate all rotations
// of a given string   
 
class Test
{
    // Print all the rotated string.
    static void printRotatedString(String str)
    {
        int len = str.length();
      
        // Generate all rotations one by one and print
        StringBuffer sb;
         
        for (int i = 0; i < len; i++)
        {
            sb = new StringBuffer();
             
            int j = i;  // Current index in str
            int k = 0;  // Current index in temp
      
            // Copying the second part from the point
            // of rotation.
            for (int k2 = j; k2 < str.length(); k2++) {
                sb.insert(k, str.charAt(j));
                k++;
                j++;
            }
      
            // Copying the first part from the point
            // of rotation.
            j = 0;
            while (j < i)
            {
                sb.insert(k, str.charAt(j));
                j++;
                k++;
            }
      
            System.out.println(sb);
        }
    }
     
    // Driver method
    public static void main(String[] args)
    {
        String  str = new String("geeks");
        printRotatedString(str);
    }
}


Python3
# A simple Python3 program to generate
# all rotations of a given string
 
# Print all the rotated strings.
def printRotatedString(str):
 
    lenn = len(str)
 
    # Generate all rotations
    # one by one and print
    temp = [0] * (lenn)
    for i in range(lenn):    
        j = i # Current index in str
        k = 0 # Current index in temp
 
        # Copying the second part from
        # the point of rotation.
        while (j < len(str)):
         
            temp[k] = str[j]
            k += 1
            j += 1
         
 
        # Copying the first part from
        # the point of rotation.
        j = 0
        while (j < i) :
         
            temp[k] = str[j]
            j += 1
            k += 1
         
 
        print(*temp, sep = "")
     
# Driver Code
if __name__ == '__main__':
    str = "geeks"
    printRotatedString(str)
     
# This code is contributed
# by SHUBHAMSINGH10


C#
// A simple C# program to generate
// all rotations of a given string    
using System;
using System.Text;
 
class GFG
{
// Print all the rotated string.
public static void printRotatedString(string str)
{
    int len = str.Length;
 
    // Generate all rotations one
    // by one and print
    StringBuilder sb;
 
    for (int i = 0; i < len; i++)
    {
        sb = new StringBuilder();
 
        int j = i; // Current index in str
        int k = 0; // Current index in temp
 
        // Copying the second part from
        // the point of rotation.
        for (int k2 = j; k2 < str.Length; k2++)
        {
            sb.Insert(k, str[j]);
            k++;
            j++;
        }
 
        // Copying the first part from
        // the point of rotation.
        j = 0;
        while (j < i)
        {
            sb.Insert(k, str[j]);
            j++;
            k++;
        }
 
        Console.WriteLine(sb);
    }
}
 
// Driver Code
public static void Main(string[] args)
{
    string str = "geeks";
    printRotatedString(str);
}
}
 
// This code is contributed
// by Shrikant13


PHP


Javascript


C++
// An efficient C++ program to print all
// rotations of a string.
#include
using namespace std;
 
// Print all the rotated string.
void printRotatedString(char str[])
{
    int n = strlen(str);
 
    // Concatenate str with itself
    char temp[2*n + 1];
    strcpy(temp, str);
    strcat(temp, str);
 
    // Print all substrings of size n.
    // Note that size of temp is 2n
    for (int i = 0; i < n; i++)
    {
        for (int j=0; j != n; j++)
            printf("%c",temp[i + j]);
        printf("\n");
    }
}
 
// Driven Program
int main()
{
    char str[] = "geeks";
    printRotatedString(str);
    return 0;
}


Java
// A simple Java program to generate all rotations
// of a given string   
 
class Test
{
    // Print all the rotated string.
    static void printRotatedString(String str)
    {
        int n = str.length();
       
        StringBuffer sb = new StringBuffer(str);
        // Concatenate str with itself
        sb.append(str);
      
        // Print all substrings of size n.
        // Note that size of sb is 2n
        for (int i = 0; i < n; i++)
        {
            for (int j=0; j != n; j++)
                System.out.print(sb.charAt(i + j));
            System.out.println();
        }
    }
     
    // Driver method
    public static void main(String[] args)
    {
        String  str = new String("geeks");
        printRotatedString(str);
    }
}


Python3
# An efficient Python3 program to print 
# all rotations of a string.
 
# Print all the rotated string.
def printRotatedString(string) :
     
    n = len(string)
 
    # Concatenate str with itself
    temp = string + string
 
    # Print all substrings of size n.
    # Note that size of temp is 2n
    for i in range(n) :
         
        for j in range(n) :
            print(temp[i + j], end = "")
             
        print()
 
# Driver Code
if __name__ == "__main__" :
 
    string = "geeks"
    printRotatedString(string)
 
# This code is contributed by Ryuga


C#
// A simple C# program to generate all rotations
// of a given string
using System;
using System.Text;
 
class Test
{
     
    // Print all the rotated string.
    static void printRotatedString(String str)
    {
        int n = str.Length;
     
        StringBuilder sb = new StringBuilder(str);
        // Concatenate str with itself
        sb.Append(str);
     
        // Print all substrings of size n.
        // Note that size of sb is 2n
        for (int i = 0; i < n; i++)
        {
            for (int j=0; j != n; j++)
                Console.Write(sb[i + j]);
            Console.WriteLine();
        }
    }
     
    // Driver method
    public static void Main(String[] args)
    {
        String str = "geeks";
        printRotatedString(str);
    }
}


PHP


Javascript


输出:

geeks
eeksg
eksge
ksgee
sgeek


方法2(棘手且高效)
这个想法是基于检查字符串是否相互旋转的有效方法。我们将 str 与自身连接起来,即我们在 str.str where 中做。是连接运算符。现在我们从 0 到 n – 1 遍历连接的字符串并打印所有大小为 n 的子字符串。

下面是这种方法的实现:

C++

// An efficient C++ program to print all
// rotations of a string.
#include
using namespace std;
 
// Print all the rotated string.
void printRotatedString(char str[])
{
    int n = strlen(str);
 
    // Concatenate str with itself
    char temp[2*n + 1];
    strcpy(temp, str);
    strcat(temp, str);
 
    // Print all substrings of size n.
    // Note that size of temp is 2n
    for (int i = 0; i < n; i++)
    {
        for (int j=0; j != n; j++)
            printf("%c",temp[i + j]);
        printf("\n");
    }
}
 
// Driven Program
int main()
{
    char str[] = "geeks";
    printRotatedString(str);
    return 0;
}

Java

// A simple Java program to generate all rotations
// of a given string   
 
class Test
{
    // Print all the rotated string.
    static void printRotatedString(String str)
    {
        int n = str.length();
       
        StringBuffer sb = new StringBuffer(str);
        // Concatenate str with itself
        sb.append(str);
      
        // Print all substrings of size n.
        // Note that size of sb is 2n
        for (int i = 0; i < n; i++)
        {
            for (int j=0; j != n; j++)
                System.out.print(sb.charAt(i + j));
            System.out.println();
        }
    }
     
    // Driver method
    public static void main(String[] args)
    {
        String  str = new String("geeks");
        printRotatedString(str);
    }
}

Python3

# An efficient Python3 program to print 
# all rotations of a string.
 
# Print all the rotated string.
def printRotatedString(string) :
     
    n = len(string)
 
    # Concatenate str with itself
    temp = string + string
 
    # Print all substrings of size n.
    # Note that size of temp is 2n
    for i in range(n) :
         
        for j in range(n) :
            print(temp[i + j], end = "")
             
        print()
 
# Driver Code
if __name__ == "__main__" :
 
    string = "geeks"
    printRotatedString(string)
 
# This code is contributed by Ryuga

C#

// A simple C# program to generate all rotations
// of a given string
using System;
using System.Text;
 
class Test
{
     
    // Print all the rotated string.
    static void printRotatedString(String str)
    {
        int n = str.Length;
     
        StringBuilder sb = new StringBuilder(str);
        // Concatenate str with itself
        sb.Append(str);
     
        // Print all substrings of size n.
        // Note that size of sb is 2n
        for (int i = 0; i < n; i++)
        {
            for (int j=0; j != n; j++)
                Console.Write(sb[i + j]);
            Console.WriteLine();
        }
    }
     
    // Driver method
    public static void Main(String[] args)
    {
        String str = "geeks";
        printRotatedString(str);
    }
}

PHP


Javascript


输出:

geeks
eeksg
eksge
ksgee
sgeek