首页 > 代码库 > LeetCode Anagrams

LeetCode Anagrams

struct mystat {    int idx;    int cnt[26];    mystat(int id = 0) {idx = id;}};bool cmp(const mystat &a, const mystat &b) {    for (int i=0; i<26; i++) {        if (a.cnt[i] < b.cnt[i]) {            return true;        } else if (a.cnt[i] > b.cnt[i]) {            break;        } else {            continue;        }    }    return false;}bool same(const mystat &a, const mystat &b) {    for (int i=0; i<26; i++) {        if (a.cnt[i] != b.cnt[i]) return false;    }    return true;}class Solution {public:    vector<string> anagrams(vector<string> &strs) {        vector<string> res;        vector<mystat> stats;        int len = strs.size();        for (int i=0; i<len; i++) {            stats.push_back(mystat(i));            for (int j=strs[i].size() - 1; j>=0; j--) {                stats.back().cnt[strs[i][j] - a]++;            }        }                sort(stats.begin(), stats.end(), cmp);        int si = 0;        while (si < len ) {            int i = si + 1;            for (; i<len; i++) {                if (same(stats[si], stats[i])) {                    res.push_back(strs[stats[i].idx]);                } else {                    break;                }            }            if (si + 1 < i) {                res.push_back(strs[stats[si].idx]);            }            si = i;        }        return res;    }    };

虽然做出来了,不过写那么长,时间又是150ms+肯定还有什么巧妙的方法。

LeetCode Anagrams