<p>Given a string array <code>words</code>, return <em>an array of all characters that show up in all strings within the </em><code>words</code><em> (including duplicates)</em>. You may return the answer in <strong>any order</strong>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<pre><strong>Input:</strong> words = ["bella","label","roller"]
<strong>Output:</strong> ["e","l","l"]
</pre><p><strong class="example">Example 2:</strong></p>
<pre><strong>Input:</strong> words = ["cool","lock","cook"]
<strong>Output:</strong> ["c","o"]
</pre>
<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= words.length &lt;= 100</code></li>
	<li><code>1 &lt;= words[i].length &lt;= 100</code></li>
	<li><code>words[i]</code> consists of lowercase English letters.</li>
</ul>

class Solution{
public:
    vector<string> commonChars(vector<string>& words) {
           unordered_map<char,int>mp1;
           unordered_map<char,int>mp2;
           unordered_map<char,int>mp3;

           int i=0;
           while(i<words[0].size())
           {    char ch=words[0][i];
                
                mp1[ch]++;
                i++;
           } 
           for(int i=1;i<words.size();i++)
           {

                    for(int j=0;j<words[0].size();j++)
                    {
                           char ch=words[i][j];
                           mp2[ch]++;

                     if(mp1.find(ch)!=mp1.end())
                            {   
                               // cout<<mp2[ch];
                                int a=mp1[ch];
                                int b=mp2[ch];
                                int c=min(a,b);
                                mp3[ch]=c;
                            }                            
                            
                    }
                    mp1.clear();
                   
                    mp1=mp3;
                      
           
                    mp2.clear();
                    mp3.clear();
        
        }
           vector<string>ans;
           string b="";
           for(auto i:mp1)
           {        b="";
                    int a=i.second;
                    while(a!=0)
                    {
                        char ch=i.first;
                        
                        b+=ch;
                        ans.push_back(b);
                        b="";
                        a--;
                    }
           }
         return ans;  
}
};
15400