# Rotation Groups - Amazon Top Interview Questions

### Problem Statement :

```A rotation group for a string contains all of its unique rotations. For example, "123" can be rotated to "231" and "312" and they are all in the same rotation group.

Given a list of strings words, group each word by their rotation group, and return the total number of groups.

Constraints

n ≤ 200 where n is the length of words.

Example 1

Input

words = ["abc", "xy", "yx", "z", "bca"]

Output

3

Explanation

There are three rotation groups:

["abc", "bca"]
["xy", "yx"]
["z"]```

### Solution :

```                        ```Solution in C++ :

int solve(vector<string>& words) {
unordered_set<string> vis;

for (string& s : words) {
for (int i = 0; i < s.size(); i++) {
rotate(s.begin(), s.begin() + 1, s.end());
if (vis.count(s)) break;
}
vis.insert(s);
}

return vis.size();
}```
```

```                        ```Solution in Java :

import java.util.*;

class Solution {
public int solve(String[] words) {
ArrayList<String> set = new ArrayList<>();
for (String word : words) {
boolean exist = false;
for (String rotation : set) {
if (rotation.length() == word.length() * 2 && rotation.contains(word)) {
exist = true;
break;
}
}
if (!exist) {
}
}
return set.size();
}
}```
```

```                        ```Solution in Python :

class Solution:
def solve(self, words):
s = set()
for ind in range(len(words)):
c = words[ind]

for i in s:
if len(c) == len(i) and c in i * 2:
break
else:
return len(s)```
```

## Insert a node at a specific position in a linked list

Given the pointer to the head node of a linked list and an integer to insert at a certain position, create a new node with the given integer as its data attribute, insert this node at the desired position and return the head node. A position of 0 indicates head, a position of 1 indicates one node away from the head and so on. The head pointer given may be null meaning that the initial list is e

## Delete a Node

Delete the node at a given position in a linked list and return a reference to the head node. The head is at position 0. The list may be empty after you delete the node. In that case, return a null value. Example: list=0->1->2->3 position=2 After removing the node at position 2, list'= 0->1->-3. Function Description: Complete the deleteNode function in the editor below. deleteNo

## Print in Reverse

Given a pointer to the head of a singly-linked list, print each data value from the reversed list. If the given list is empty, do not print anything. Example head* refers to the linked list with data values 1->2->3->Null Print the following: 3 2 1 Function Description: Complete the reversePrint function in the editor below. reversePrint has the following parameters: Sing