# Anagram Checks - Amazon Top Interview Questions

### Problem Statement :

```Given two strings s0 and s1, return whether they are anagrams of each other.

Constraints

n ≤ 100,000 where n is the length of s0
m ≤ 100,000 where m is the length of s1

Example 1

Input
s0 = "listen"
s1 = "silent"

Output
True

Example 2

Input
s0 = "bedroom"
s1 = "bathroom"

Output
False```

### Solution :

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

int primes = {2,  3,  5,  7,  11, 13, 16, 17, 23, 29, 31, 41, 43,
47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101};

bool solve(string s0, string s1) {
long long firstCode = 0;
long long secondCode = 0;

for (auto &c : s0) {
firstCode += (c - 'a' + 1) * primes[(c - 'a')];
}

for (auto &c : s1) {
secondCode += (c - 'a' + 1) * primes[(c - 'a')];
}

return firstCode == secondCode;
}```
```

```                        ```Solution in Java :

import java.util.*;

class Solution {
public boolean solve(String s0, String s1) {
if (s0.length() != s1.length())
return false;

int[] store = new int;

for (int i = 0; i < s0.length(); i++) {
store[s0.charAt(i)]++;
store[s1.charAt(i)]--;
}

for (int n : store)
if (n != 0)
return false;

return true;
}
}```
```

```                        ```Solution in Python :

class Solution:
def solve(self, s0, s1):

freq = {}
freq2 = {}

if len(s0) != len(s1):
return False

for ch in s0:
if ch in freq:
freq[ch] += 1
else:
freq[ch] = 1

for ch in s1:
if ch in freq2:
freq2[ch] += 1
else:
freq2[ch] = 1

for key in freq.keys():
if key not in freq2 or freq[key] != freq2[key]:
return False

return True```
```

## 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