14. Longest Common Prefix

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        string prefix = "";
        for( int i = 0 ; i < strs[0].size(); i++ ){
            string first = strs[0];
            for (auto s: strs){
                if (i >= s.size()){
                    return prefix;
                }
                if (first[i] == s[i]){
                    continue;
                } else {
                    return prefix;
                }
            }
            prefix += first[i];
        }
        return prefix;
    }
};

49. Group Anagrams

πŸš€ Approach 1: Sorting (Most Intuitive)

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        vector<vector<string>> ans;
        unordered_map<string, vector<string>> um;
        for(auto &&i : strs){
            string sorted_str = i;
            sort(sorted_str.begin(), sorted_str.end());
            um[sorted_str].push_back(i);
        }
        for(auto &&i: um){
            ans.push_back(i.second);
        }
        return ans;
    }
};

πŸš€ Approach 2: # Β Frequency Count (Optimal)

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        map<vector<int> ,vector<string>> um;
        vector<vector<string>> ans;
        for(auto &&i: strs)
        {
            vector<int> freq(26);
            for(auto &&j: i)
                freq[j-'a']++;
            um[freq].push_back(i);
        }
        for(auto i: um) ans.push_back(i.second);
        return ans;
    }
};