bool compare(string s1, string s2) {
sort(s1.begin(), s1.end());
sort(s2.begin(), s2.end());
return s1 < s2;
}
bool equal(string s1, string s2) {
sort(s1.begin(), s1.end());
sort(s2.begin(), s2.end());
return s1 == s2;
}
class Solution {
public:
vector<string> anagrams(vector<string> &strs) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
sort(strs.begin(), strs.end(), compare);
vector<string> ret;
bool same = false;
for (int i = 0; i < strs.size() - 1; i++) {
if (equal(strs[i], strs[i + 1])) {
ret.push_back(strs[i]);
same = true;
} else if (same) {
ret.push_back(strs[i]);
same = false;
}
}
if (same) {
ret.push_back(strs.back());
}
return ret;
}
};
Small Case: 4ms
Large Case: 964ms
Time: O(nlgn)
Space: O(n)