Problem of the day
You have 'N' cakes of different names. You want to choose exactly 3 cakes out of these 'N' cakes. The name of the ith cake is 'S[i]' (0 <= i < 'N'). The three chosen cakes should follow the following conditions.
The name of the cake should start with 'c', 'a', 'k', 'e', or 's'.
No two cakes should begin with the same letter.
Return the number of ways to choose three cakes irrespective of the order.
Note : Assume 0-based indexing.
For example:Let 'N' = 4, S = ["choco", "apple", "kesar", "strawberry"].
There exist 4 different ways to choose three cakes following all the required conditions i.e. {"choco", "apple", "kesar"}, {"choco", "apple", "strawberry"}, {"choco", "strawberry", "kesar"}, {"strawberry", "apple", "kesar"}.
The first line contains an integer 'T', which denotes the number of test cases.
For every test case:-
The first line contains only one integer 'N' the number of cakes.
The second line contains 'N' space-separated strings denoting the elements of the 'S'.
Output Format:-
For each test case, return the number of ways to choose three cakes irrespective of the order.
Note:-
You don’t need to print anything. Just implement the given function.
1 <= 'T' <= 10
1 <= 'N' <= 10^4
0 <= |S[i]| <= 10
All the names of cakes are distinct and consist of lowercase letters.
Time Limit: 1 sec
2
4
apple kesar strawberry peach
2
apple kesar
1
0
'N' = 4, S = ["apple", "kesar", "strawberry", "peach"].
There exists only one way to choose three cakes following all the required conditions i.e. {"strawberry", "apple", "kesar"}. So, the answer is 1.
Second test case:-
'N' = 2, S = ["apple", "kesar"]. As 'N' is less than 3, So there is no way to choose the three cakes. Hence, the answer is 0.
2
5
apple kesar strawberry peach almond
1
apple
2
0
When choosing 3 cakes, there are no more than 10 patterns of the first character of those names.
Approach:-
Let's first find the frequency of the number of cakes starting with the letters 'c', 'a', 'k', 'e', or 's' each. Now when choosing 3 cakes, there are no more than 10 patterns of the first character of those names. Let f('x') denote the number of cakes that begin with the character 'x'. The number of ways to choose cakes such that the name begins with 'c', 'a' and 'k' will be f('c') * f('a') * f('k'). So we just need to compute the answer for each of the 10 patterns, this can be achieved using three pointers.
Algorithm:-
O(N). Where 'N' is the total number of cakes.
Since we are iterating over all the elements once therefore the time complexity will be O(N). Therefore the time complexity will be O(N).
O(1).
Since, we are using constant extra space. Therefore, the space complexity will be O(1).