给定一个字符串str,任务是找到启动并在给定的字符串的每一个可能的指标旋转后相同的字符结尾的字符串的数量。
例子:
Input: str = “GeeksforGeeks”
Output: 2
Explanation:
All possible strings with rotations at every index are: “GeeksforGeeks”, “eeksforGeeksG”, “eksforGeeksGe”, “ksforGeeksGee”, “sforGeeksGeek”, “forGeeksGeeks”, “orGeeksGeeksf”, “rGeeksGeeksfo”, “GeeksGeeksfor”, “eeksGeeksforG”, “eksGeeksforGe”, “ksGeeksforGee”, “sGeeksforGeek”.
Out of the above strings formed only 2 string starts and ends with the same characters: “eksforGeeksGe” and “eksGeeksforGe”.
Input: str = “aaabcdd”
Output: 3
Explanation:
All possible strings with rotations at every index are: “aaabcdd”, “aabcdda”, “abcddaa”, “bcddaaa”, “cddaaab”, “ddaaabc”, “daaabcd”.
Out of the above strings formed only 3 string starts and ends with the same characters: “aabcdda”, “abcddaa” and “daaabcd”.
天真的方法:想法是生成给定字符串的所有可能的旋转,并检查旋转后形成的每个字符串是否以相同的字符开始和结束。如果是,则将此字符串包括在计数中。打印最终计数。
高效的方法:计数可能的字符串的有效方法是在给定具有连续相同字符的索引处旋转给定的字符串。因此,最终计数是给定字符串每个连续字符的(连续相同字符– 1) 。
下面是上述方法的实现:
C++
// C++ program for the above appraoch
#include
using namespace std;
// Function to find the count of string
// with equal end after rotations
int countStrings(string s)
{
// To store the final count
int cnt = 0;
// Traverse the string
for (int i = 1; s[i]; i++) {
// If current character is same
// as the previous character then
// increment the count
if (s[i] == s[i + 1]) {
cnt++;
}
}
// Return the final count
return cnt;
}
// Driver Code
int main()
{
// Given string
string str("aacbb");
// Function Call
cout << countStrings(str);
return 0;
}
Java
// Java program for the above approach
class GFG{
// Function to find the count of string
// with equal end after rotations
static int countStrings(String s)
{
// To store the final count
int cnt = 0;
// Traverse the string
for(int i = 1; i < s.length() - 1; i++)
{
// If current character is same
// as the previous character then
// increment the count
if (s.charAt(i) == s.charAt(i + 1))
{
cnt++;
}
}
// Return the final count
return cnt;
}
// Driver Code
public static void main(String[] args)
{
// Given string
String str = "aacbb";
// Function call
System.out.println(countStrings(str));
}
}
// This code is contributed by rutvik_56
Python3
# Python3 program for the above approach
# Function to find the count of string
# with equal end after rotations
def countStrings(s):
# To store the final count
cnt = 0;
# Traverse the string
for i in range(1, len(s) - 1):
# If current character is same
# as the previous character then
# increment the count
if (s[i] == s[i + 1]):
cnt += 1;
# Return the final count
return cnt;
# Driver Code
if __name__ == '__main__':
# Given string
str = "aacbb";
# Function call
print(countStrings(str));
# This code is contributed by 29AjayKumar
C#
// C# program for the above approach
using System;
class GFG{
// Function to find the count of string
// with equal end after rotations
static int countStrings(String s)
{
// To store the final count
int cnt = 0;
// Traverse the string
for(int i = 1; i < s.Length - 1; i++)
{
// If current character is same
// as the previous character then
// increment the count
if (s[i] == s[i + 1])
{
cnt++;
}
}
// Return the final count
return cnt;
}
// Driver Code
public static void Main(String[] args)
{
// Given string
String str = "aacbb";
// Function call
Console.WriteLine(countStrings(str));
}
}
// This code is contributed by sapnasingh4991
Javascript
1
时间复杂度: O(N) ,其中N是给定字符串的长度。