Subsequence Game

Moderate
0/80
Average time to solve is 20m
profile
Contributed by
3 upvotes
Asked in company
Google inc

Problem statement

Shail is very fond of strings. So his parents on his birthday gave him a task on strings as a present. The task is as follows:

There is the main string ‘STR’ of length ‘N’ consisting of only lowercase English letters, and there is an array of strings ‘ARR’ of length ‘M’, where each string consists of only lowercase English letters. Now Shail has to find the count of such strings in the array ‘ARR’ which occurs as a subsequence in the string ‘STR’ and tell it to their parents.

But Shail is busy with his birthday celebration and cannot solve the task, but want to make his parents happy by giving them the answer to the task, So being his friend he asked you to solve this problem, Can you help him?.

EXAMPLE :
Input: ‘N’ = 5, ‘M' = 2, ‘STR’ = “abcde” , ‘ARR’ = [“ad”, “cb”]

Output: 1
In this case, string “ad” occurs as a subsequence in the string ‘STR’ and the index of the match is ‘0’ and ‘3’ respectively. Also, string “cb” isn’t a subsequence because there is no occurrence of ‘b’ after the first ‘c’ at index ‘2’. Hence the output will be ‘1’.
Detailed explanation ( Input/output format, Notes, Images )
Input Format :
The first line will contain the integer ‘T’, the number of test cases.

The first line of each test case contains two integers, ‘N’ and ‘M’ , denoting the length of string and array respectively.

Followed by a line containing the string ‘STR’ of length.

Followed by ‘M’ lines, each containing the string of the array ‘ARR’. 
Output format :
For each test case, print the count of strings in the array ‘ARR’ that occurs as a subsequence in the string ‘STR’.
Note :
You don't need to print anything. It has already been taken care of. Just implement the given function.
Constraints :
1 <= ‘T’ <= 10
1 <= ‘N’ <= 10^4
STR.length = N
1 <= ‘M’ <= 10^4
‘STR’ only consists of lowercase English letters.
It is guaranteed that sum of ‘N’ over all test cases is <= 10^5
It is guaranteed that sum of lengths of strings in array ‘ARR’ over all test cases is <= 10^5
Time Limit: 1 sec
Sample Input 1 :
2
5 1
virat
vat
10 3
helloworld
oo
abcdefghijk
hewd
Sample Output 1 :
1
2
Explanation Of Sample Input 1 :
For the first test case,
The matching sequence index for string “vat” is = [‘0’, ‘3’, ‘4’].

Hence, the output will be: 1

For the second test case,
The matching sequence index for string “oo” is = [‘4’, ‘6’].
There is no matching sequence index for string “abcdefghijk”.
The matching sequence index for string “hewd” is = [‘0’, ‘1’, ‘5’, ‘9’].

Hence, the output will be: 2
Sample Input 2 :
2
10 4
btovxbkumc
btovxbku
to
zueoxxxjme
yjkclbkbtl
26 2
bcdaefhgikjlmonprqstuvxwzy
empty
abcdefghijklmnopqrstuvwxyz
Sample Output 2 :
2
1
Hint

Can we somehow maintain the matching elements while iterating on string ‘STR’ and string from array ‘ARR’?.

Approaches (2)
Brute Force Approach

The idea for this approach is to maintain the index of the matching element. So for every string of array ‘ARR’, we will start out iteration from ‘0’ up to ‘N-1’ for string ‘STR’, let's denote the current index of iteration to be ‘i’. Now for the string of array ‘ARR’ to be a subsequence of string ‘STR’, the order of characters should match, hence we can start with index ‘j = 0’ for the above iteration, and whenever ‘STR[i]’ matches the ‘jth’ index if the current string of ‘ARR’, we increment ‘j’. If at the end if ‘j’ is equal to the length of the current string of the array ‘ARR’, then we can say that the current string is a subsequence in string ‘STR’.

 

We will follow the same process for every string of ‘ARR’ and update the answer by ‘1’, whenever found a string that satisfies the above-mentioned condition.
 

Algorithm:
 

// The function will return the count of strings that are subsequence in the string ‘STR’.

Int subsequenceGame(N, M, STR, ARR)

  • Initialize the variable ‘ANS’ with the value ‘0’.
  • Run a for loop from ‘0’ to ‘M-1’ with a variable named ‘index’.
    • Initialize the variable ‘SIZE’ with the value of the length of the string ‘ARR[index]’.
    • Initialize the variable ‘j’ with the value ‘0’.
    • Run a for loop from ‘0’ to ‘N-1’ with a variable named ‘i’.
      • If ‘STR[i] == ARR[index][j]’
        • Increment ‘j’ by ‘1’.
        • If ‘j == SIZE’
          • Stop the loop.
    • If ‘j == SIZE’
      • Increment ‘ANS’ by ‘1’.
  • Return ‘ANS’.
Time Complexity

O( N * M ), Where ‘N’ and ‘M’ are input integers.

In the above idea, we iterate on the string ‘STR’ of length ‘N’, for every string of the array ‘ARR’ of length ‘M’, 

Hence the time complexity will be O( N * M )

Space Complexity

O( 1 ).

 

In our algorithm, we used ‘ANS’ and some temporary loop variables, 

Hence the space complexity will be O( 1 ).

Code Solution
(100% EXP penalty)
Subsequence Game
Full screen
Console