In this HackerEarth Find the String problem solution You are given a matrix of characters. The matrix has N rows and M columns. Given a string s, you have to tell if it is possible to generate that string from given matrix.
Rules for generating string from matrix are:

You have to pick first character of string from row 1, second character from row 2 and so on. The  character of string is to be picked from row 1, that is, you can traverse the (N + 1)th rows in a cyclic manner (row 1 comes after row N).
If an occurrence of a character is picked from a row, you cannot pick the same occurrence again from that row.
You have to print Yes if given string can be generated from matrix using the given rules, else print No.


HackerEarth Find the String problem solution


HackerEarth Find the String problem solution.

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,m;
        string s;
        cin>>n>>m;
        int f[1005][26]={0};
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                char temp;
                cin>>temp;
                f[i][temp-'a']++;
            }
        }
        cin>>s;
        bool check=1;
        for(int i=0;i<s.size() && f;i++)
        {
            int lev=i%n;
            if(f[lev][s[i]-'a'])f[lev][s[i]-'a']--;
            else check=0;
        }
        if(check)cout<<"Yes\n";
        else cout<<"No\n";
    }
    return 0;
}