📌  相关文章
📜  获得相同字符串所需的最小旋转 C++ 程序

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

获得相同字符串所需的最小旋转 C++ 程序

给定一个字符串,我们需要找到获得相同字符串所需的最小旋转次数。

例子:

Input : s = "geeks"
Output : 5

Input : s = "aaaa"
Output : 1

这个想法是基于下面的帖子。

检查字符串是否相互旋转的程序


第 1 步:
初始化结果 = 0(这里的结果是旋转计数)
第 2 步:取一个与原始字符串相等的临时字符串与其自身连接。
第 3 步:现在从第二个字符(或索引 1)开始取大小与原始字符串相同的临时字符串的子字符串。
第 4 步:增加计数。
步骤 5:检查子字符串是否与原始字符串相等。如果是,则打破循环。否则转到第 2 步并从下一个索引开始重复。

C/C++
// C++ program to determine minimum number
// of rotations required to yield same
// string.
#include 
using namespace std;
  
// Returns count of rotations to get the
// same string back.
int findRotations(string str)
{
    // tmp is the concatenated string.
    string tmp = str + str;
    int n = str.length();
  
    for (int i = 1; i <= n; i++) {
  
        // substring from i index of original
        // string size.
        string substring = tmp.substr(i, str.size());
  
        // if substring matches with original string
        // then we will come out of the loop.
        if (str == substring)
            return i;
    }
    return n;
}
  
// Driver code
int main()
{
    string str = "abc";
    cout << findRotations(str) << endl;
    return 0;
}



输出:
3

时间复杂度: O(n 2 )

有关更多详细信息,请参阅有关获得相同字符串所需的最小旋转的完整文章!