527. Word Abbreviation

class Solution {
public:
    vector<string> wordsAbbreviation(vector<string>& dict) {
        vector<string> res(dict.size());
        vector<int> lenAbbr(dict.size());

        for (int i = 0; i < dict.size(); i++) {
            int len = dict[i].size(); lenAbbr[i] = len - 2;
            res[i] = getAbbr(dict[i], lenAbbr[i]);
        }

        for (int i = 0; i < dict.size(); i++) {
            while (true) {
                unordered_set<int> duplicate;
                for (int j = i + 1; j < dict.size(); j++)
                    if (res[i] == res[j]) duplicate.insert(j);
                if (duplicate.empty()) break;
                duplicate.insert(i);
                for (int d : duplicate)
                    res[d] = getAbbr(dict[d], --lenAbbr[d]);
            }
        }

        return res;
    }
private:
    string getAbbr(string s, int lenAbbr) {
        if (lenAbbr < 2) return s;
        return s.substr(0, s.size() - 1 - lenAbbr) + to_string(lenAbbr) + s[s.size() - 1];
    }
};

results matching ""

    No results matching ""