--- 題型 ---

放剩下 相關的題目 ψ(._. )>


/*
 * NeetCode
 * Anagram Groups
*/
class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string, vector<string>> um;
        for(int i=0;i<strs.size();i++){
            string sortedStr = strs[i];
            sort(sortedStr.begin(),sortedStr.end());
            um[sortedStr].push_back(strs[i]);
        }
        //
        vector<vector<string>> result;
        for (const auto& pair : um) {
            result.push_back(pair.second);
        }
        return result;
    }
};

/*
 * NeetCode
 * Top K Elements in List
*/
class Solution {
public:
    static bool cmp(pair<int,int>&a,pair<int,int>&b){
        return a.second > b.second;
    }
    vector<int> topKFrequent(vector<int>& nums, int k) {
        unordered_map<int, int> um;
        for (int num:nums) {
            um[num]++;
        }
        //
        vector<pair<int, int>> v(um.begin(), um.end());
        sort(v.begin(), v.end(),cmp);
        vector<int> result;
        for (int i = 0; i < k; ++i) {
            result.push_back(v[i].first);
        }
        return result;
    }
};

/*
 * NeetCode
 * String Encode and Decode
*/
class Solution {
public:

    string encode(vector<string>& strs) {
        string s;
        for(int i=0;i<strs.size();++i){
            s+=strs[i];
            s+='\n';
        }
        cout << s << endl;
        return s;
    }

    vector<string> decode(string s) {
        string str;
        vector<string>strs;
        for(int i=0;i<s.size();++i){
            if(s[i]=='\n'){
                strs.push_back(str);
                str="";
            }else{
                str+=s[i];
            }
        }
        return strs;
    }
};

/*
 * NeetCode
 * Is Palinrome
*/
class Solution {
public:
    char down(char c){
        if(c>='A' && c<='Z'){
            return c-'A'+'a';
        }else{
            return c;
        }
    }
    bool isPalindrome(string s) {
        for(int l=0,r=s.size()-1;l<=r;++l,--r){
            while( !isalnum(s[l]) ){
                if(l>s.size()-1){
                    return true;
                }
                ++l;
            }
            while( !isalnum(s[r]) ){
                if(r<0){
                    return true;
                }
                --r;
            }
            cout << l << r << endl;
            if( down(s[l])!=down(s[r]) ){
                return false;
            }
        }
        return true;
    }
};

/*
 * NeetCode
 * Two Integer Sum II
*/
class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        unordered_map<int,int> um;
        int len = numbers.size();
        for(int i=0;i<len;++i){
            if(um.find(numbers[i])!=um.end()){
                return {um[numbers[i]],i+1};
            }
            if( (target-numbers[i]>numbers[i]) ){
                um[target-numbers[i]]=i+1;
            }
        }
        return {};
    }
};

Last updated

Was this helpful?