Anagrams
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
±¾Ìâ×îÇÉÃîµÄ˼Ï룺
ÒòΪËùνµÄanagramÊÇ×Ö·ûλÖò»Ò»Ñù£¬×Ö·û´®ÊÇÒ»ÑùµÄ£¬ÄÇô¾Í°Ñ¸Ã×Ö·ûÅÅÐòÖ®ºó×÷ΪmapµÄ¹Ø¼ü×Ö¡£
ÅÅÐòÖ®ºó×÷Ϊ¹Ø¼ü×Ö-¾ø£¡
vectoranagrams(vector &strs) { vector vst; if (strs.size() < 2) return vst; map > msvs; for (int i = 0; i < strs.size(); i++) { string s = strs[i]; sort(s.begin(), s.end());//¾«»ª£¬×îÇÉÃîµÄµØ·½£ºÅÅÐòºó×÷ΪmapµÄ¹Ø¼ü×Ö¡£»Æ¾îÓ׸¾ÍâË msvs[s].push_back(strs[i]); } for (auto it:msvs) { if (it.second.size() > 1) vst.insert(vst.end(),it.second.begin(), it.second.end()); } return vst; }
ÏÂÃæÒ²ÊÇhash˼ÏëдµÄ³ÌÐò£¬³ÌÐòÓ¦¸ÃÕýÈ·ÁË£¬¿Éϧ³¬Ê±¡£»¹ÊÇÐèÒªÏñÉÏÃæÄÇÑù½øÒ»²½ÓÅ»¯¡£
vectoranagrams(vector &strs) { vector vst; if (strs.size() < 2) return vst; vector v1, v2; int n = strs.size(); for (int i = 0; i < n; i++) { bool flag = false; vst.push_back(strs[i]); v1.clear(); v1.resize(26,0); for (int k = 0; k < strs[i].length(); k++) { v1[strs[i][k]-'a']++; } for (int j = i+1; j < n; j++) { if (strs[i] == strs[j]) continue; v2.clear(); v2.resize(26,0); for (int k = 0; k < strs[j].length(); k++) { v2[strs[j][k]-'a']++; } if (v1 == v2) { vst.push_back(strs[j]); strs.erase(strs.begin()+j); n--; flag = true; } } if (!flag) vst.pop_back(); } return vst; }